Bird
Raised Fist0
C++programming~20 mins

Constructor calling order in C++ - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
πŸŽ–οΈ
Constructor Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Constructor calling order in single inheritance
What is the output of this C++ program showing constructor calls in single inheritance?
C++
#include <iostream>
using namespace std;

class Base {
public:
    Base() { cout << "Base constructor\n"; }
};

class Derived : public Base {
public:
    Derived() { cout << "Derived constructor\n"; }
};

int main() {
    Derived d;
    return 0;
}
A
Derived constructor
B
Derived constructor
Base constructor
C
Base constructor
D
Base constructor
Derived constructor
Attempts:
2 left
πŸ’‘ Hint
Remember base class constructors run before derived class constructors.
❓ Predict Output
intermediate
2:00remaining
Constructor calling order in multiple inheritance
What is the output of this C++ program demonstrating constructor calls in multiple inheritance?
C++
#include <iostream>
using namespace std;

class A {
public:
    A() { cout << "A constructor\n"; }
};

class B {
public:
    B() { cout << "B constructor\n"; }
};

class C : public A, public B {
public:
    C() { cout << "C constructor\n"; }
};

int main() {
    C c;
    return 0;
}
A
C constructor
A constructor
B constructor
B
B constructor
A constructor
C constructor
C
A constructor
B constructor
C constructor
D
A constructor
C constructor
B constructor
Attempts:
2 left
πŸ’‘ Hint
Base classes are constructed in the order they are declared in the class header.
❓ Predict Output
advanced
2:00remaining
Constructor calling order with virtual inheritance
What is the output of this C++ program illustrating constructor calls with virtual inheritance?
C++
#include <iostream>
using namespace std;

class Base {
public:
    Base() { cout << "Base constructor\n"; }
};

class A : virtual public Base {
public:
    A() { cout << "A constructor\n"; }
};

class B : virtual public Base {
public:
    B() { cout << "B constructor\n"; }
};

class Derived : public A, public B {
public:
    Derived() { cout << "Derived constructor\n"; }
};

int main() {
    Derived d;
    return 0;
}
A
Base constructor
A constructor
B constructor
Derived constructor
B
A constructor
B constructor
Base constructor
Derived constructor
C
Base constructor
B constructor
A constructor
Derived constructor
D
A constructor
Base constructor
B constructor
Derived constructor
Attempts:
2 left
πŸ’‘ Hint
Virtual base class constructors are called before any derived class constructors.
❓ Predict Output
advanced
2:00remaining
Constructor calling order with member objects
What is the output of this C++ program showing constructor calls including member objects?
C++
#include <iostream>
using namespace std;

class Member {
public:
    Member() { cout << "Member constructor\n"; }
};

class Container {
    Member m;
public:
    Container() { cout << "Container constructor\n"; }
};

int main() {
    Container c;
    return 0;
}
A
Member constructor
Container constructor
B
Container constructor
Member constructor
C
Member constructor
D
Container constructor
Attempts:
2 left
πŸ’‘ Hint
Member objects are constructed before the container class constructor body runs.
🧠 Conceptual
expert
3:00remaining
Order of constructor calls in complex inheritance
Given this class hierarchy with virtual and non-virtual inheritance, which sequence correctly shows the constructor call order when creating an object of class D?
C++
class A { public: A() { cout << "A"; } };
class B : virtual public A { public: B() { cout << "B"; } };
class C : virtual public A { public: C() { cout << "C"; } };
class D : public B, public C { public: D() { cout << "D"; } };
AB A C D
BA B C D
CA C B D
DB C A D
Attempts:
2 left
πŸ’‘ Hint
Virtual base class A is constructed once before B and C.

Practice

(1/5)
1. In C++, when creating an object of a derived class, which constructor is called first?
easy
A. Member objects' constructors
B. Derived class constructor
C. Base class constructor
D. Destructor of the base class

Solution

  1. Step 1: Understand constructor order in inheritance

    When an object of a derived class is created, the base class constructor runs first to initialize the base part.
  2. Step 2: Identify the first constructor called

    After the base class constructor, member objects and then the derived class constructor run.
  3. Final Answer:

    Base class constructor -> Option C
  4. Quick Check:

    Base constructor runs first [OK]
Hint: Base constructor always runs before derived [OK]
Common Mistakes:
  • Thinking derived constructor runs first
  • Confusing member object construction order
  • Assuming destructors run during construction
2. Which of the following is the correct syntax to call a base class constructor from a derived class constructor in C++?
easy
A. Derived() { Base(); }
B. Derived() : Base {}
C. Derived() -> Base() {}
D. Derived() : Base() {}

Solution

  1. Step 1: Recall base constructor call syntax

    In C++, the base class constructor is called in the initializer list of the derived constructor using a colon and parentheses.
  2. Step 2: Match correct syntax

    Derived() : Base() {} uses the correct syntax: Derived() : Base() {}. Others are invalid or incorrect.
  3. Final Answer:

    Derived() : Base() {} -> Option D
  4. Quick Check:

    Use colon and parentheses for base constructor call [OK]
Hint: Use colon and parentheses to call base constructor [OK]
Common Mistakes:
  • Calling base constructor inside derived constructor body
  • Using arrow (->) instead of colon
  • Omitting parentheses after base class name
3. Consider the following code:
class A {
public:
  A() { std::cout << "A "; }
};
class B {
public:
  B() { std::cout << "B "; }
};
class C : public A {
  B b;
public:
  C() { std::cout << "C "; }
};

int main() {
  C obj;
  return 0;
}

What is the output when this program runs?
medium
A. A B C
B. B A C
C. C A B
D. A C B

Solution

  1. Step 1: Determine constructor call order

    First, base class A constructor runs printing "A ". Then member object b of class B is constructed printing "B ". Finally, derived class C constructor runs printing "C ".
  2. Step 2: Combine outputs in order

    The output is "A B C " exactly in that sequence.
  3. Final Answer:

    A B C -> Option A
  4. Quick Check:

    Base, members, derived = A B C [OK]
Hint: Base then members then derived constructor order [OK]
Common Mistakes:
  • Assuming members construct before base
  • Mixing order of output strings
  • Ignoring member object construction
4. Given this code snippet:
class Base {
public:
  Base() { std::cout << "Base "; }
};
class Derived : public Base {
public:
  Derived() { std::cout << "Derived "; }
};

int main() {
  Derived d();
  return 0;
}

What is the output when this program runs?
medium
A. No output
B. Derived Base
C. Base Derived
D. Compilation error

Solution

  1. Step 1: Analyze object declaration

    The line 'Derived d();' is a function declaration, not an object instantiation, so no constructor runs.
  2. Step 2: Understand program output

    Since no object is created, no constructors run and no output is printed.
  3. Final Answer:

    No output -> Option A
  4. Quick Check:

    Function declaration, no object created [OK]
Hint: Watch out for most vexing parse: 'Derived d();' is a function [OK]
Common Mistakes:
  • Thinking 'Derived d();' creates an object
  • Expecting constructor output
  • Ignoring C++ parsing rules
5. You have a class hierarchy:
class X {
public:
  X() { std::cout << "X "; }
};
class Y {
public:
  Y() { std::cout << "Y "; }
};
class Z : public X {
  Y y1, y2;
public:
  Z() { std::cout << "Z "; }
};

int main() {
  Z obj;
  return 0;
}

What is the exact output when this program runs?
hard
A. Y Y X Z
B. X Y Y Z
C. X Z Y Y
D. Y X Y Z

Solution

  1. Step 1: Identify constructor call order

    First, base class X constructor runs printing "X ". Then member objects y1 and y2 of class Y are constructed in declaration order, printing "Y " twice.
  2. Step 2: Derived class constructor runs last

    Finally, derived class Z constructor runs printing "Z ".
  3. Final Answer:

    X Y Y Z -> Option B
  4. Quick Check:

    Base, members in order, derived = X Y Y Z [OK]
Hint: Members construct in declaration order after base [OK]
Common Mistakes:
  • Mixing member construction order
  • Assuming derived runs before members
  • Ignoring multiple member objects
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard