gpt4 book ai didi

C++如何从一个参数的派生类构造函数调用两个参数的父类(super class)构造函数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:21 24 4
gpt4 key购买 nike

例如,这个:

class shape {
private:
int height;
int width;
public:
shape(int h, int w) {
height = h;
width = w;
}
void display() {
std::cout << height << "\t" << width << std::endl;
}
};

class square : public shape {
public:
square(int d) {
shape(d, d);
}
};

我收到以下错误消息:

no default constructor exists for class "shape"

为什么会这样?我知道它需要一个基类的默认构造函数,我想知道为什么要这样,如果我将 square 构造函数的语法更改为初始化列表,square(int d ): 形状(d, d){}。程序编译成功。有什么不同?

最佳答案

只需像这样调用构造函数:

class square : public shape {
public:
square(int d): shape(d, d)
{
}
};

在派生类的构造函数体之前调用构造函数很重要。您还应该在构造函数主体之前初始化您的成员变量。

如果您不这样做,将完成所有对象的默认初始化,然后在第二步完成赋值。在您的示例中,您首先尝试使用父类的默认初始化,这是不可能的,因为您没有默认构造函数。

可在此处找到有关此主题的更多信息: http://en.cppreference.com/w/cpp/language/initializer_list

关于C++如何从一个参数的派生类构造函数调用两个参数的父类(super class)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49463013/

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