ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel
  • »
  • Technology»
  • Computers & Software»
  • Computer Science & Programming»
  • Programming Languages

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

    • sirama profile image
      Author

      sirama 5 years ago

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

    • profile image

      Mika 5 years ago

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

      Or why not CCircle (int rad =0) ?

    working

    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, hubpages.com uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: "https://hubpages.com/privacy-policy#gdpr"

    Show Details
    Necessary
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the googleapis.com or gstatic.com domains, for performance and efficiency reasons. (Privacy Policy)
    Features
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Marketing
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Statistics
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)