Constructor Overloading In C++ - C++ Programming Tutorial
C++ Course / Polymorphism / Constructor Overloading In C++

Constructor Overloading In C++

BLUF: Mastering Constructor Overloading In C++ is a critical step in becoming a proficient C++ developer. This lesson provides a deep dive into the syntax, performance considerations, and real-world applications of this concept.
Key Performance Insight: Constructor Overloading In C++

C++ is renowned for its efficiency. Learn how Constructor Overloading In C++ enables low-level control and high-performance computing in the tutorial below.

In C++, the concept of constructor overloading plays a crucial role in Object-Oriented Programming (OOP). This feature enables a class to possess multiple constructors with varying parameters. By defining multiple constructor versions with different argument lists, objects can be instantiated in diverse manners. The compiler identifies the appropriate class instance based on the types and quantities of parameters provided. As a result, the code gains enhanced flexibility and readability.

In C++, overloaded constructors typically share the same name as the class itself. The constructor to be called is determined by the number and data types of the arguments provided in the program. Nevertheless, they differ in the variety and quantity of parameters they can receive.

Syntax

It has the following syntax:

Example

class Class_name {

   public:

      // Constructor with no parameters (default constructor)

      Class_name () {

         // Initialization code

      }

      // Constructor with one parameter

      Class_name (type paramnum) {

         // Initialization code using paramnum

      }

      // Constructor with two parameters

            Class_name (type paramnum1, type paramnum2) {

         // Initialization code using param1 and param2

      }

      // Constructor with more parameters if needed

      Class_name (type paramnum1, type paramnum2, type paramnum3) {

         // Initialization code using paramnum1, paramnum2, and paramnum3

      }

};

Explanation:

In this instance, we employ various constructor declarations to instantiate a C++ class named Class_name showcasing constructor overloading. Following this, the class incorporates parameterized constructors that take in one, two, or three arguments.

Each constructor in this class is responsible for setting the initial values of the data members using the input values provided during object instantiation. The placeholders paramnum, paramnum1, and paramnum2 are used to represent the actual names and types of variables such as strings or integers.

C++ Constructor Overloading Example

Let's consider a basic illustration of constructor overloading demonstrating various methods to initialize objects, utilizing a class called Student.

Example

Example

#include <iostream>

#include <string>

using namespace std;  //using standard namespace

class Student {

private:

    string name;

    int age;

    float grade;

public:

    // Default constructor

    Student() {

        name = "Unknown";

        age = 0;

        grade = 0.0;

        cout << "Default constructor called." << endl;

    }

    // Constructor with name only

    Student(string n) {

        name = n;

        age = 0;

        grade = 0.0;

        cout << "Constructor with name called." << endl;

    }

    // Constructor with name and age

    Student(string n, int a) {

        name = n;

        age = a;

        grade = 0.0;

        cout << "Constructor with name and age called." << endl;

    }

    // Constructor with name, age, and grade

    Student(string n, int a, float g) {

        name = n;

        age = a;

        grade = g;

        cout << "Constructor with name, age, and grade called." << endl;

    }

    void display() {

        cout << "Name: " << name << ", Age: " << age << ", Grade: " << grade << endl;

    }

};

int main() {   //main function

    Student s1;       // Default constructor

    Student s2("Alice");       // Constructor with name

    Student s3("Bob", 20);         // Constructor with name and age

    Student s4("Charlie", 21, 88.5f);   // Constructor with all details

    cout << "\nStudent 1: "; s1.display();

    cout << "Student 2: "; s2.display();

    cout << "Student 3: "; s3.display();

    cout << "Student 4: "; s4.display();

    return 0;

}

Output:

Output

Default constructor called.

Constructor with name called.

Constructor with name and age called.

Constructor with name, age, and grade called.

Student 1: Name: Unknown, Age: 0, Grade: 0

Student 2: Name: Alice, Age: 0, Grade: 0

Student 3: Name: Bob, Age: 20, Grade: 0

Student 4: Name: Charlie, Age: 21, Grade: 88.5

Explanation:

In this illustration, we showcase constructor overloading by employing a Student class that includes various constructors. Each constructor is responsible for setting the student's name, age, and grade using the given parameters. Subsequently, the appropriate constructor is called based on the number of arguments passed when the object is instantiated. To conclude, we utilize the display method to showcase the particulars of each student.

How Constructor Overloading Works in C++?

In C++, when creating an object, the compiler will determine the most suitable constructor based on the arguments passed. Constructor overloading allows us to specify multiple constructors with varying parameter lists. Subsequently, the compiler will select the constructor that aligns with the quantity and data types of the arguments supplied when the object is instantiated.

C++ Constructor Overloading Example

Let's consider an instance to demonstrate the functionality of constructor overloading in the C++ programming language.

Example

Example

#include <iostream>

#include <string>

using namespace std;   //using standard namespace 

class Book {

private:

    string title;

    string author;

    float price;

public:

    // Default constructor

    Book() {

        title = "Untitled";

        author = "Unknown";

        price = 0.0;

        cout << "Default constructor called." << endl;

    }

    // Constructor with title only

    Book(string t) {

        title = t;

        author = "Unknown";

        price = 0.0;

        cout << "Constructor with title called." << endl;

    }

    // Constructor with title and author

    Book(string t, string a) {

        title = t;

        author = a;

        price = 0.0;

        cout << "Constructor with title and author called." << endl;

    }

    // Constructor with title, author, and price

    Book(string t, string a, float p) {

        title = t;

        author = a;

        price = p;

        cout << "Constructor with title, author, and price called." << endl;

    }

    void display() {

        cout << "Title: " << title << ", Author: " << author << ", Price: $" << price << endl;

    }

};

int main() {     //main function

    Book b1;    // Default constructor

    Book b2("The Alchemist");   // One-parameter constructor

    Book b3("1984", "George Orwell");    // Two-parameter constructor

    Book b4("Dune", "Frank Herbert", 19.99);   // Three-parameter constructor

    cout << "\nBook 1: "; b1.display();

    cout << "Book 2: "; b2.display();

    cout << "Book 3: "; b3.display();

    cout << "Book 4: "; b4.display();

    return 0;

}

Output:

Output

Default constructor called.

Constructor with title called.

Constructor with title and author called.

Constructor with title, author, and price called.

Book 1: Title: Untitled, Author: Unknown, Price: $0

Book 2: Title: The Alchemist, Author: Unknown, Price: $0

Book 3: Title: 1984, Author: George Orwell, Price: $0

Book 4: Title: Dune, Author: Frank Herbert, Price: $19.99

Explanation:

In this instance, we are employing a Book class containing three attributes: title, author, and price. The default constructor initializes all the fields with default values. Subsequently, the display method is employed to showcase the book particulars, illustrating the values set by each constructor, whether default or specified. Such a technique enhances the versatility in initializing objects.

Benefits of Constructor Overloading in C++

There are several features of constructor overloading in C++. Some main features are as follows:

  • There may be several constructors in a class, where every class contains a unique set of parameters.
  • Automatic Invocation: The appropriate constructor is automatically called with the provided argument.
  • Code Reusability: It minimizes unnecessary code by allowing many initialization strategies.
  • Flexibility in Object Initialization: It offers several methods to initialize an object and multiple initialization options.
  • Object Cloning: It allows us to define copy constructor to handle both deep and shallow copying objects, which ensures that the object is easily copied.
  • Encapsulation of Initialization Logic: It helps to encapsulate the initialization logic inside the constructor. It means that the initialization logic is handled within the constructor instead of using several methods or outside the class.
  • Conclusion

In summary, constructor overloading plays a crucial role in C++ object-oriented programming. This feature enables a class to have multiple constructors, each accepting a different set of parameters. As a result, objects can be instantiated in different manners depending on the provided information. This enhances object initialization, making it more straightforward, adaptable, and conducive to improved code quality and reuse.

In C++, the utilization of overloaded constructors empowers developers to offer partial initialization, complete initialization, or default values depending on the specific scenario. Constructor overloading as a concept enhances flexibility and functionality during the creation of classes, rendering it a fundamental component of the system.

C++ Constructor Overloading FAQs

C++ constructor overloading refers to the ability to have multiple constructors in a class with the same name but different parameters. This allows objects to be initialized in different ways based on the arguments passed to the constructor.

In C++, an overloaded constructor allows a programmer to define several constructors within a single class, each with varying numbers or types of parameters. This approach enables the creation of objects in different ways by providing varying sets of input during object instantiation.

The compiler determines which constructor to invoke in C++ based on the number and types of arguments passed to the constructor during object instantiation.

C++ allows the compiler to determine which object to instantiate. This decision occurs at compile time and relies on the arguments provided. The compiler analyzes the function signatures, considering both the quantity and data types of the parameters. This mechanism exemplifies compile-time polymorphism.

It is possible to have constructors overloaded in C++ using default arguments.

Yes, despite the potential for confusion, if multiple constructors utilize default arguments and potentially overlap in functionality, the compiler will generate an error. It is crucial to strategically design overloading to avoid such clashes.

Yes, it is possible to overload both member functions and constructors of a class simultaneously in C++.

Yes, Python provides support for constructor overloading within the same class along with other member methods, as long as the parameter types differ.

5) Is it possible for a class in C++ to have both parameterized and default constructors by utilizing overloading?

Yes, in C++, a class can be designed to have both a parameterized constructor and a default constructor through overloading. This feature enables the creation of objects with either default values or with various specific initialization parameters.

Input Required

This code uses input(). Please provide values below:

Logic Practice
Install Logic Practice
Add to home screen for a faster app-like experience