2012-06-05 158 views
0

是否有可能具有1个构造具有作为默认的构造函数,如果一个参数没有传入的选项。默认构造函数可以选择参数?

实施例,代替具有2层构造,其中1是默认的构造,另一种是用于初始化一个构造传入的数字,是否有可能只有1个构造函数,如果传入一个值,将该值设置为成员函数,并且如果没有值传入,则将成员函数设置为数字。

例如:

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

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

+0

搜索“默认参数”。 – chris

+0

如果您仍然使用当前的默认构造函数,则初始化初始化列表中的所有成员变量通常是更好的做法。因此'Weight():size(0){}'是最好的。 – masaers

回答

3

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

class Weight 
{ 
public: 

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

    int size; 
}; 

这个构造函数可能会被调用一个参数或没有参数;如果使用无参数调用它,则0将用作参数a的参数。

请注意,我也已经声明了这个构造函数explicit。如果你有一个可以用一个参数调用的构造函数,你应该总是声明它为explicit以防止发生不需要的隐式转换,除非你真的想让构造函数成为一个转换构造函数。

(如果你不熟悉但与转换构造函数或隐式转换,没关系。只是遵守这个规则,对于大多数你永远写代码就足够了)

+0

了解!感谢您的帮助! – nub

-1

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

Google C++ Style guide也推荐它。

+1

如果没有用户声明的构造函数,即使没有用户声明的构造函数是默认构造函数,也只会隐式声明默认构造函数。 –

+0

感谢澄清。 – Akina91

相关问题