我有一个构造函数声明:
MyConstuctor(int inDenominator, int inNumerator);
和定义为
MyConstuctor::MyConstuctor(int inDenominator,
int inNumerator, int inWholeNumber = 0)
{
mNum = inNumerator;
mDen = inDenominator;
mWhole = inWholeNumber;
}
但我希望有一个选项可以将整数作为第三个参数传递,具体取决于调用者对象。这是正确的方法。如果不是什么可以替代方式。
答案 0 :(得分:36)
您需要的是:
//declaration:
MyConstuctor(int inDenominator, int inNumerator, int inWholeNumber = 0);
//definition:
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber)
{
mNum = inNumerator;
mDen = inDenominator;
mWhole = inWholeNumber;
}
这样您就可以为inWholeNumber
提供非默认值;并且您将无法提供它,因此将使用0作为默认值。
作为补充提示,最好在定义中使用initialization list:
//definition:
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber) :
mNum(inNumerator), mDen(inDenominator), mWhole (inWholeNumber)
{
}
答案 1 :(得分:4)
不,您只需要在方法声明中提供默认值。方法的定义应该包含所有3个参数而没有默认值。如果该类的用户选择传递第3个参数,则将使用该参数,否则将使用声明中指定的默认值。
答案 2 :(得分:1)
您还应该将默认参数添加到声明中,并且不需要实现中的默认值。