如何为C++构造函数指定默认参数值?

14

我有一个构造函数声明如下:

MyConstuctor(int inDenominator, int inNumerator);

和定义为

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

但是我希望能够有一个选项,根据调用对象,将整数作为第三个参数传递。这是正确的方式吗?如果不是,有什么替代方式。

3个回答

39

你需要的是:

//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将作为默认值。
额外的提示,更好的做法是在定义中使用初始化列表
//definition:
MyConstuctor::MyConstuctor(int inDenominator,int inNumerator,int inWholeNumber) :
    mNum(inNumerator), mDen(inDenominator), mWhole (inWholeNumber)
{   
}

4
不,你只需要在方法的声明中提供默认值。方法的定义应该有所有三个参数,但不带默认值。如果类的使用者选择传递第三个参数,则会使用它,否则将使用声明中指定的默认值。

1

你应该在声明中添加默认参数,而在实现中添加默认值是不必要的。


1
据我所知,您可以在任何地方提供默认值,但每个参数只能提供一次(在声明和定义中都是如此)。为了文档化的目的,建议在类定义中提供所有默认值(类的用户不应该需要查找类实现以查看它的使用方式)。 - UncleBens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接