默认构造函数,可以选择接受参数吗?

时间:2012-06-05 01:21:18

标签: c++

如果没有传入参数,是否有可能让1个构造函数可以选择默认构造函数。

示例,而不是有2个构造函数,其中1是默认构造函数,而另一个是初始化传入的数字的构造函数,是否可能只有1个构造函数,如果传入一个值,则将该值设置为成员function,如果没有传入值,则将成员函数设置为数字。

示例:

WEIGHT.H文件:

   class Weight
{
public:
    Weight() { size = 0; }
    Weight(int a) : size(a) {}

    int size;
};

MAIN.CPP文件:

int main(void)
{
  Weight w1;
  Weight w2(100);
}

我一直在研究不同的学校项目,他们都需要有不同类型的构造函数,我想知道是否有一种方法只能拥有它,这样可以节省时间。 谢谢您的帮助。

2 个答案:

答案 0 :(得分:3)

是的,构造函数参数可能有一个默认参数,就像其他函数一样。如果构造函数的所有参数都具有默认参数,则构造函数也是默认构造函数。所以,例如,

class Weight
{
public:

    explicit Weight(int a = 0) : size(a) { }

    int size;
};

可以使用单个参数或不带参数调用此构造函数;如果在没有参数的情况下调用它,0将用作a参数的参数。

请注意,我还声明了此构造函数explicit。如果您有一个可以使用单个参数调用的构造函数,则应始终声明它explicit以防止发生不需要的隐式转换,除非您确实希望构造函数成为转换构造函数。

(如果您还不熟悉转换构造函数或隐式转换,那没关系;只要遵循此规则就足以满足您编写的大部分代码。)

答案 1 :(得分:-1)

是的,James的建议是可能的,但是如果你没有提供任何构造函数定义,如果你没有定义Default构造函数,编译器将接管定义部分。 这不是一个问题,但更好的做法是定义Default构造函数以正确初始化值。

Google C++ Style guide也推荐它。