我偶然发现了几次,最后删除了初始构造函数.我搜索了谷歌,但我甚至不知道这是什么叫...
class you {
private:
string name;
int number;
COLORREF color;
drinks favoriteDrink; // here
public:
you(string Name, int Number, COLORREF Color);
string GetName();
int GetNumber();
COLORREF GetColor();
};
Run Code Online (Sandbox Code Playgroud)
Drinks是另一个类,它的构造函数如下:(int x,bool y).我想进一步初始化它.再次,通常我只是删除构造函数并编写一个函数ex:init(w/e).有没有办法做到这一点?
定义构造函数时,它可以包含成员初始化列表.这是初始化成员和基类的正确方法.所以你要实现这样的构造函数you:
you::you(string Name, int Number, COLORREF Color) :
name(Name),
number(Number),
color(Color),
drink(whatever_arguments, you_want)
{
// body as usual
}
Run Code Online (Sandbox Code Playgroud)
请注意,这是初始化类的数据成员的唯一方法.如果你这样做:
you::you(string Name, int Number, COLORREF Color)
{
name = Name;
number = Number;
color = Color;
}
Run Code Online (Sandbox Code Playgroud)
然后你没有初始化成员,你分配给他们.空成员初始化列表将首先默认初始化它们.这意味着调用类的默认构造函数,并为原始类型保留未初始化的值.然后,构造函数体通过分配它们来覆盖它们.
使用成员初始化列表总是更好,因为您跳过了(无用的)默认初始化.有时,如果您有一个不可赋值的成员(例如const成员,引用或只是没有可访问赋值运算符的对象),它也是唯一的方法.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |