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

31,872

Solution 1

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)
{   
}

Solution 2

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.

Solution 3

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

Share:
31,872
boom
Author by

boom

XML, C, C++, Cocoa, Gtk, Gtkmm, Gnome, zlib, libxml, Berkelium, OpenCV

Updated on July 09, 2022

Comments

  • boom
    boom almost 2 years

    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.