gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:50:50 25 4
gpt4 key购买 nike

我遇到过几次,最后我删除了初始构造函数。我在谷歌上搜索过,但我什至不知道这叫什么...

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

};

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
}

请注意,这是唯一初始化类数据成员的方法。如果您改为这样做:

you::you(string Name, int Number, COLORREF Color)
{
name = Name;
number = Number;
color = Color;
}

那么您不是初始化成员,而是分配给他们。空成员初始化列表将首先默认初始化它们。这意味着调用类的默认构造函数,并为原始类型保留未初始化的值。然后,构造函数主体通过分配给它们来覆盖它们。

使用成员初始化列表总是更好,因为您跳过了(无用的)默认初始化。有时,如果您有不可赋值的成员(例如 const 成员、引用,或者只是一个没有可访问赋值运算符的对象),这也是唯一的方法。

关于不使用其构造函数的 C++ 类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23671295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com