Which statements about C++ constructors in inheritance are correct? Consider access to base members and whether constructors are inherited or callable.

Difficulty: Easy

Correct Answer: Both A and B.

Explanation:

Introduction / Context:Understanding how constructors interact with inheritance is essential for designing class hierarchies. This question explores access to base members and the notion of inheriting or invoking base constructors.

Given Data / Assumptions:

  • Standard C++ access control: public, protected, private.
  • Derived classes initialize their base subobjects via constructor initializer lists.
  • We consider the classic rule that constructors themselves are not inherited as callable functions on the derived type (ignoring using-inheritance syntax details).

Concept / Approach:Derived member functions, including constructors, may access base public and protected members subject to access rules. Constructors are not inherited as ordinary members; instead, a derived constructor explicitly invokes a chosen base constructor in its initializer list. Therefore, statements A and B are correct together, while claiming no access or full inheritance of constructors is wrong.

Step-by-Step Solution:1) Access: within Derived::Derived(), you can read/write Base's protected/public members.2) Invocation: Derived::Derived(args) : Base(base_args) { /.../ }3) There is no syntax to “inherit” constructors as ordinary callable functions (though using Base::Base in modern C++ inherits constructors for overload set construction, not as general callables).4) Therefore, pick “Both A and B.”

Verification / Alternative check:Create a Base with protected data and a Derived constructor that initializes it via Base’s constructor; compilation succeeds respecting access control.

Why Other Options Are Wrong:C: contradicts access rules.E: misconstrues inheritance of constructors; they are not ordinary inherited methods.

Common Pitfalls:Forgetting to call the appropriate base constructor, leading to unintended default initialization of the base subobject.

Final Answer:Both A and B.

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion