Difficulty: Easy
Correct Answer: Both B and C.
Explanation:
Introduction / Context:
Developers often rely on defaults, but C++ only supplies certain constructors when specific conditions are met. Access control on constructors is also flexible. This question identifies the incorrect statements among common myths.
Given Data / Assumptions:
Concept / Approach:
Statement A is true: a constructor is indeed a special member function. Statement B is false because the compiler does not “always” provide a zero-argument constructor; it does so only when none is user-declared and other rules allow it. Statement C is false because constructors may be private or protected (e.g., singletons, factory patterns, or abstract bases). Therefore, the combined incorrect choice is “Both B and C.”
Step-by-Step Solution:
1) Verify A: constructors are members (though unnamed and special).2) Evaluate B: suppressed if any constructor is user-declared; also constrained by class content.3) Evaluate C: access may be restricted intentionally.4) Conclusion: B and C are the incorrect claims.
Verification / Alternative check:
Create a class with a user-declared constructor taking arguments only; observe that default construction is no longer available unless explicitly declared.
Why Other Options Are Wrong:
A is correct; E is false because B and C are indeed incorrect.
Common Pitfalls:
Assuming default construction exists after adding any non-default constructor; you must explicitly add a default constructor if needed.
Final Answer:
Both B and C.
Discussion & Comments