gpt4 book ai didi

c++ - 抽象类的继承成员不能由继承的构造函数初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:01 25 4
gpt4 key购买 nike

class CarPart
{
public:
CarPart(): name(""), price(0) {}
virtual int getPrice() = 0;//{return price;}
protected:
int price;
string name;
};

class Tire: public CarPart
{
public:
virtual int getPrice() {return price;}
Tire(): CarPart(), name("Tire"), price(50)
{}
};

Visual 2010 告诉我 name 和 price 不是 deriv 的成员,但它们是继承的(错误 c2614)。我做错了什么?

最佳答案

您不能初始化不是您类的直接成员的成员。 n 不是deriv 的直接成员,它是base 的直接成员。

然而,n 可以被 deriv 访问,所以你总是可以在你的 deriv 构造函数中分配它,但你应该真正初始化它base 构造函数。

此外,您不能拥有 虚拟 构造函数。您是想使用 virtual 析构函数吗?

class base
{
public:
base() : n(0) {} // Are you sure you don't want this?
virtual void show() = 0;
protected:
int n;
};

class deriv : public base
{
public:
deriv()
{
n = 0;
}

virtual void show() {}
};

编辑(对 OP 编辑​​的回应):为此您不需要虚拟方法:

class CarPart
{
public:
CarPart(const char* newName, int newPrice) : name(newName), price(newPrice) {}

const std::string& GetName() const { return name; }
int GetPrice() const { return price; }
private:
std::string name;
int price;
};

class Tire : public CarPart
{
public:
Tire() : CarPart("Tire", 50) {}
};

假设您所有的 CarPart 都必须有名称和价格,这应该绰绰有余。

关于c++ - 抽象类的继承成员不能由继承的构造函数初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471780/

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