Constructor overloading in C++ - Time & Space Complexity
We want to understand how the time it takes to create objects changes when using multiple constructors.
How does choosing different constructors affect the work done when making an object?
Analyze the time complexity of the following code snippet.
class Box {
public:
Box() { /* default constructor */ }
Box(int size) { /* constructor with one parameter */ }
Box(int width, int height) { /* constructor with two parameters */ }
};
int main() {
Box b1;
Box b2(10);
Box b3(5, 7);
}
This code shows a class with three constructors, each creating an object differently.
Look for repeated work inside constructors or object creation.
- Primary operation: Each constructor runs once when an object is made.
- How many times: One time per object creation; no loops or recursion inside constructors here.
Creating one object runs one constructor. Creating more objects runs constructors that many times.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 constructor calls |
| 100 | 100 constructor calls |
| 1000 | 1000 constructor calls |
Pattern observation: The work grows directly with the number of objects created.
Time Complexity: O(n)
This means the time to create objects grows in a straight line as you make more objects.
[X] Wrong: "Using many constructors makes object creation slower in a complex way."
[OK] Correct: Each constructor runs only once per object, so the time grows simply with how many objects you make, not how many constructors exist.
Understanding how constructors affect performance helps you explain object creation clearly and shows you know how code scales with more data.
"What if one constructor had a loop inside it? How would the time complexity change when creating objects with that constructor?"
Practice
Solution
Step 1: Understand constructor overloading concept
Constructor overloading means having more than one constructor in a class, each with different parameters.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.Final Answer:
Having multiple constructors with different parameters in the same class -> Option BQuick Check:
Constructor overloading = multiple constructors with different parameters [OK]
- Confusing overloading with overriding
- Thinking constructors must have no parameters
- Believing constructors can only be defined outside the class
Solution
Step 1: Check constructor syntax
Constructors have no return type and share the class name.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.Final Answer:
class MyClass { MyClass(); MyClass(int x); }; -> Option AQuick Check:
Constructors have no return type [OK]
- Adding return types to constructors
- Using void or int before constructor name
- Incorrect punctuation or missing semicolons
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;
}Solution
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.Step 2: Determine output from std::cout
Output prints b1.length (5) and b2.length (10) separated by space.Final Answer:
5 10 -> Option CQuick Check:
Default constructor sets 5, parameterized sets 10 [OK]
- Assuming uninitialized variables default to 0
- Mixing up which constructor is called
- Forgetting to print both values
class Sample {
public:
Sample() { }
Sample() { }
};Solution
Step 1: Check constructor signatures
Both constructors have no parameters, so they have identical signatures.Step 2: Understand C++ rules on overloading
Constructors must differ in parameter lists to overload; identical signatures cause redefinition error.Final Answer:
Two constructors have the same parameter list causing a redefinition error -> Option AQuick Check:
Constructor signatures must differ [OK]
- Trying to overload with same parameter list
- Adding return types to constructors
- Thinking constructors can't be public
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"; }
};Solution
Step 1: Identify argument type in object creation
3.14 is a double literal by default in C++.Step 2: Match argument type to constructor
The constructor with double parameter matches exactly, so it is called.Final Answer:
Double constructor -> Option DQuick Check:
Exact type match constructor is chosen [OK]
- Assuming float constructor is called for 3.14
- Thinking int constructor is called due to truncation
- Believing ambiguity causes error here
Ready to prove it?
Pass the test and this pattern moves unknown
