Bird
Raised Fist0
C++programming~10 mins

Constructor overloading in C++ - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Constructor overloading
Create object
↓
Call constructor
↓
Match constructor signature
↓
Constructor 1: no params
↓
Constructor 2: 1 param
↓
Constructor 3: 2 params
↓
Initialize object with matched constructor
↓
Object ready to use
When creating an object, the program chooses the constructor that matches the given parameters to initialize the object.
Execution Sample
C++
class Box {
public:
  int length;
  int width;
  Box() { length = 1; }
  Box(int l) { length = l; }
  Box(int l, int w) { length = l; width = w; }
};
Box b1; Box b2(5); Box b3(3,4);
This code creates three Box objects using different constructors based on the number of arguments.
Execution Table
StepObject CreatedConstructor CalledParametersState After Construction
1b1Box()nonelength=1, width=uninitialized
2b2Box(int l)5length=5, width=uninitialized
3b3Box(int l, int w)3, 4length=3, width=4
4EndNo more objectsN/AAll objects initialized
💡 All objects created with matching constructors, execution ends.
Variable Tracker
VariableStartAfter b1After b2After b3
b1.lengthuninitialized111
b1.widthuninitializeduninitializeduninitializeduninitialized
b2.lengthuninitializeduninitialized55
b2.widthuninitializeduninitializeduninitializeduninitialized
b3.lengthuninitializeduninitializeduninitialized3
b3.widthuninitializeduninitializeduninitialized4
Key Moments - 3 Insights
Why does b1 call the constructor with no parameters?
Because b1 is created without any arguments, so the program matches it to the constructor with no parameters as shown in step 1 of the execution_table.
What happens if we create an object with two parameters?
The constructor with two parameters is called, initializing both length and width, as seen in step 3 of the execution_table.
Why is width uninitialized for b1 and b2?
Because the constructors called for b1 and b2 do not set width, so it remains uninitialized as shown in the variable_tracker.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, which constructor is called when creating b2?
ABox(int l) with one parameter
BBox() with no parameters
CBox(int l, int w) with two parameters
DNo constructor is called
💡 Hint
Check step 2 in the execution_table where b2 is created.
At which step does the object have both length and width initialized?
AStep 1
BStep 2
CStep 3
DNo step initializes both
💡 Hint
Look at the 'State After Construction' column in the execution_table.
If we create Box b4(7), what will be the value of b4.length according to variable_tracker logic?
A1
B7
Cuninitialized
D4
💡 Hint
Refer to how b2 is initialized with one parameter in variable_tracker.
Concept Snapshot
Constructor Overloading in C++:
- Define multiple constructors with different parameters.
- Object creation calls constructor matching given arguments.
- Allows flexible object initialization.
- Unused members remain uninitialized unless set.
- Helps create objects with different starting states.
Full Transcript
Constructor overloading means having several constructors in a class, each with different parameters. When you create an object, the program picks the constructor that matches the number and type of arguments you provide. For example, if you create an object without arguments, the constructor with no parameters runs. If you provide one or two arguments, the matching constructor runs. This lets you create objects with different initial values easily. Variables not set by a constructor remain uninitialized. This visual trace shows three objects created with different constructors and how their variables change.

Practice

(1/5)
1. What is constructor overloading in C++?
easy
A. Creating constructors only with no parameters
B. Having multiple constructors with different parameters in the same class
C. Using the same constructor multiple times in a program
D. Defining constructors outside the class only

Solution

  1. Step 1: Understand constructor overloading concept

    Constructor overloading means having more than one constructor in a class, each with different parameters.
  2. Step 2: Match definition with options

    Having multiple constructors with different parameters in the same class correctly describes this concept, while others describe unrelated ideas.
  3. Final Answer:

    Having multiple constructors with different parameters in the same class -> Option B
  4. Quick Check:

    Constructor overloading = multiple constructors with different parameters [OK]
Hint: Look for multiple constructors with different parameter lists [OK]
Common Mistakes:
  • Confusing overloading with overriding
  • Thinking constructors must have no parameters
  • Believing constructors can only be defined outside the class
2. Which of the following is the correct syntax for constructor overloading in C++?
easy
A. class MyClass { MyClass(); MyClass(int x); };
B. class MyClass { void MyClass(); void MyClass(int x); };
C. class MyClass { int MyClass(); int MyClass(int x); };
D. class MyClass { MyClass() int x; MyClass(int x) int x; };

Solution

  1. Step 1: Check constructor syntax

    Constructors have no return type and share the class name.
  2. Step 2: Identify correct syntax

    class MyClass { MyClass(); MyClass(int x); }; shows constructors with no return type and different parameters, which is correct. Others wrongly use return types or invalid syntax.
  3. Final Answer:

    class MyClass { MyClass(); MyClass(int x); }; -> Option A
  4. Quick Check:

    Constructors have no return type [OK]
Hint: Remember constructors have no return type, just the class name [OK]
Common Mistakes:
  • Adding return types to constructors
  • Using void or int before constructor name
  • Incorrect punctuation or missing semicolons
3. What will be the output of the following code?
class Box {
public:
  int length;
  Box() { length = 5; }
  Box(int l) { length = l; }
};

int main() {
  Box b1;
  Box b2(10);
  std::cout << b1.length << " " << b2.length;
  return 0;
}
medium
A. 5 5
B. 0 10
C. 5 10
D. 10 5

Solution

  1. Step 1: Identify which constructor is called for each object

    b1 uses the default constructor setting length to 5; b2 uses the parameterized constructor setting length to 10.
  2. Step 2: Determine output from std::cout

    Output prints b1.length (5) and b2.length (10) separated by space.
  3. Final Answer:

    5 10 -> Option C
  4. Quick Check:

    Default constructor sets 5, parameterized sets 10 [OK]
Hint: Match constructor parameters with object creation [OK]
Common Mistakes:
  • Assuming uninitialized variables default to 0
  • Mixing up which constructor is called
  • Forgetting to print both values
4. Find the error in this constructor overloading example:
class Sample {
public:
  Sample() { }
  Sample() { }
};
medium
A. Two constructors have the same parameter list causing a redefinition error
B. Constructors must have return type
C. Constructors cannot be public
D. Class must have at least one data member

Solution

  1. Step 1: Check constructor signatures

    Both constructors have no parameters, so they have identical signatures.
  2. Step 2: Understand C++ rules on overloading

    Constructors must differ in parameter lists to overload; identical signatures cause redefinition error.
  3. Final Answer:

    Two constructors have the same parameter list causing a redefinition error -> Option A
  4. Quick Check:

    Constructor signatures must differ [OK]
Hint: Overloaded constructors must differ in parameters [OK]
Common Mistakes:
  • Trying to overload with same parameter list
  • Adding return types to constructors
  • Thinking constructors can't be public
5. Given the class below, which constructor will be called when creating MyClass obj(3.14);?
class MyClass {
public:
  MyClass(int x) { std::cout << "Int constructor"; }
  MyClass(double x) { std::cout << "Double constructor"; }
  MyClass(float x) { std::cout << "Float constructor"; }
};
hard
A. Compilation error due to ambiguity
B. Int constructor
C. Float constructor
D. Double constructor

Solution

  1. Step 1: Identify argument type in object creation

    3.14 is a double literal by default in C++.
  2. Step 2: Match argument type to constructor

    The constructor with double parameter matches exactly, so it is called.
  3. Final Answer:

    Double constructor -> Option D
  4. Quick Check:

    Exact type match constructor is chosen [OK]
Hint: Literal 3.14 is double by default, so double constructor called [OK]
Common Mistakes:
  • Assuming float constructor is called for 3.14
  • Thinking int constructor is called due to truncation
  • Believing ambiguity causes error here
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