不使用其构造函数的C++类声明

Eva*_*ake 1 c++ constructor

我偶然发现了几次,最后删除了初始构造函数.我搜索了谷歌,但我甚至不知道这是什么叫...

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).有没有办法做到这一点?

Rei*_*ica 5

定义构造函数时,它可以包含成员初始化列表.这是初始化成员和基类的正确方法.所以你要实现这样的构造函数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成员,引用或只是没有可访问赋值运算符的对象),它也是唯一的方法.