Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I specify default argument values for a C++ constructor?

I have a constructor declaration as:

MyConstuctor(int inDenominator, int inNumerator);

and definition as

MyConstuctor::MyConstuctor(int inDenominator,
    int inNumerator, int inWholeNumber = 0)
{
    mNum = inNumerator;
    mDen = inDenominator;
    mWhole = inWholeNumber;
}

but i want to have an option of passing whole number as third parameter depending on caller object. is this the right way. if not what can be the alternative way.

like image 926
boom Avatar asked Aug 03 '10 05:08

boom


3 Answers

What you need is:

//declaration:
MyConstuctor(int inDenominator, int inNumerator, int inWholeNumber = 0); 

//definition:
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber) 
{   
    mNum = inNumerator;   
    mDen = inDenominator;   
    mWhole = inWholeNumber;   
}

This way you will be able to provide a non-default value for inWholeNumber; and you will be able not to provide it so 0 will be used as the default.


As an additional tip, better use initialization list in the definition:

//definition:
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber) :
    mNum(inNumerator), mDen(inDenominator), mWhole (inWholeNumber)
{   
}
like image 93
Igor Avatar answered Oct 18 '22 02:10

Igor


No, you need to provide the default value in the declaration of the method only. The definition of the method should have all 3 parameters without the default value. If the user of the class chooses to pass the 3rd parameter it will be used, otherwise default value specified in the declaration will be used.

like image 4
Naveen Avatar answered Oct 18 '22 00:10

Naveen


You should add the default parameter to the declaration as well and the default value in the implementation is not necessary.

like image 1
dst Avatar answered Oct 18 '22 00:10

dst