0

如果未传入参数,是否可以让 1 个构造函数成为默认构造函数。

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

例子:

重量.H 文件:

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

    int size;
};

MAIN.CPP 文件:

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

我一直在从事不同的学校项目,它们都需要不同类型的构造函数,我想知道是否有办法只拥有一次以节省时间。谢谢您的帮助。

4

2 回答 2

3

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

class Weight
{
public:

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

    int size;
};

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

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

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

于 2012-06-05T01:22:07.253 回答
-1

是的,正如James所建议的那样,但您知道,如果您没有定义 Default 构造函数,如果您没有提供任何构造函数定义,编译器将接管定义部分。它本身不是问题,但定义默认构造函数以正确初始化值是一种更好的做法。

Google C++ Style guide也推荐它。

于 2012-06-05T01:41:59.297 回答