ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel

What is the need for Constructor with default arguments in C++?

Updated on February 2, 2017

1. Introduction

A Constructor of a class takes the responsibility of creating the object, allocating spaces for its members and initializing the data members. Simply, it constructs the object and hence got the name, Constructor. In this hub, we will see what is the importance of the default constructor. First, we will see how do we create a constructor.

  • A constructor is a function without any return type
  • A function name is exactly matching the name of the class

The above two rules qualify a class member function as Constructor.

2. Constructor with Single Parameter

Here, a constructor will receive only one parameter and initializes the internal members. Look at the below code example:

// TestIt.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class CCircle
{
private:
	//Sample 01: Only one member for Demo purpose
	int m_radius;

public:
	//Sample 02: Constructor
	CCircle(int rad)
	{
		m_radius = rad;
	}

	//Sample 03: Get and Set methods
	void SetRadius(int rad)
	{
		m_radius = rad;
	}

	int GetRadius()
	{
		return m_radius;
	}
};

int main()
{
	//Sample 04: Create the Circle Object & Display Radius
	CCircle obj(10);
	cout<< "Radius: " << obj.GetRadius() << endl;

	//Sample 05: Set the radius and Display the Radius
	obj.SetRadius(12);
	cout<< "Radius: " << obj.GetRadius() << endl;

	//Sample 06: Here is the need for Default Constructor
	//CCircle obj2;
}

1) The class CCircle has a single constructor that takes an integer parameter. This integer parameter is used to initialize the data member. This Constructor is shown below:

//Sample 02: Constructor
CCircle(int rad)
{
	m_radius = rad;
}

2) In the Main function, when we are creating the object obj, we are passing the value of 10. This will construct the object and initialize the value of the data member with the value of 10. Code snippet 04, prints the radius as 10. Once the printing is done, the radius is changed to 12 and printed again. The code and its output are shown below:

//Sample 04: Create the Circle Object & Display Radius
CCircle obj(10);
cout<< "Radius: " << obj.GetRadius() << endl;

//Sample 05: Set the radius and Display the Radius
obj.SetRadius(12);
cout<< "Radius: " << obj.GetRadius() << endl;

What happens when I try to create the object without passing any value as shown below?

CCircle obj2;

The compiler will not allow the above object creation, as we have only one constructor that takes a single parameter. Not only that. As the object creation is bound to pass an integer value, our current class does not support creating the array of objects like CCircle obj[10]. The compiler error is shown below:

Compiler Error C2512
Compiler Error C2512 | Source

3. Default Constructor in C++

I hope, you know what is constructor by this time. When a constructor does not take any input parameter, then we call that as default constructor. The compiler will provide the default constructor when the class does not have any constructor. Let us remove the code snippet //Sample 02: and change the main method as shown below:

//Sample 03: Create the Circle Object & Display Radius
CCircle obj;
cout<< "Radius: " << obj.GetRadius() << endl;

//Sample 04: Set the radius and Display the Radius
obj.SetRadius(12);
cout<< "Radius: " << obj.GetRadius() << endl;

Note that in Code snippet Sample 03, constructing object is allowed. The compiler is not giving any error. In this case, we have the compiler provided default constructor to make the object creation successful. Also, be aware that we can create an array of objects also. But what is the problem here? OK. You should look at the below output now:

You see the problem right? The compiler provided constructor allocated the space for the data member, but initializing the data member is not done. How do we overcome this situation?

We can provide our own default constructor as shown below:

//Sample 02: Default constructor

CCircle()

{

m_radius = 0;

}

Also we can provide the one parameter constrctor as shown below:

//Sample 03: Overloaded constructor

CCircle(int rad)

{

m_radius = rad;

}

Below is the complete Final Code with the output:

// TestIt.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class CCircle
{
private:
	//Sample 01: Only one member for Demo purpose
	int m_radius;

public:
	//Sample 02: Default constructor
	CCircle()
	{
		m_radius = 0;
	}

	//Sample 03: Overloaded constructor
	CCircle(int rad)
	{
		m_radius = rad;
	}

	//Sample 04: Get and Set methods
	void SetRadius(int rad)
	{
		m_radius = rad;
	}

	int GetRadius()
	{
		return m_radius;
	}
};

int main()
{
	//Sample 05: Create the Circle Object & Display Radius
	CCircle obj;
	cout<< "Radius: " << obj.GetRadius() << endl;

	//Sample 06: Set the radius and Display the Radius
	obj.SetRadius(12);
	cout<< "Radius: " << obj.GetRadius() << endl;

	//Sample 07: Create the Circle Object & Display Radius
	CCircle NextObj(6);
	cout<< "Radius: " << NextObj.GetRadius() << endl;

	//Sample 08: Set the radius and Display the Radius
	NextObj.SetRadius(12);
	cout<< "Radius: " << NextObj.GetRadius() << endl;

}

Did you faced problems on Compiler provided Default Constructor?

See results

Rate this Article

5 out of 5 stars from 1 rating of Article

Comments

    0 of 8192 characters used
    Post Comment

    • profile image

      Mika 3 years ago

      Is it any reason why you don t use an initialization list, in the constructor ?

      Or why not CCircle (int rad =0) ?

    • sirama profile image
      Author

      sirama 3 years ago

      Having CCircle (int rad =0) do not require any default constructor. Good point Mika.

    Click to Rate This Article