我对类和父类(super class)共享字段有些困惑。我原以为这样可以:
class SuperC {
public:
SuperC();
protected:
double value;
};
class C : public SuperC {
public :
C(double value);
};
SuperC::SuperC(){}
C::C(double value):SuperC(),value(value){}
但是编译器告诉我C没有字段“值”。 C不继承SuperC中定义的吗?
许多
最佳答案
可以,但是您只能使用构造函数初始化列表语法来初始化当前类成员。
您必须在SuperC
中创建一个重载的构造函数,以初始化value
并对其进行调用。
class SuperC {
public:
SuperC();
SuperC(double v) : value(v) {}
protected:
double value;
};
class C : public SuperC {
public :
C(double value);
};
SuperC::SuperC(){}
C::C(double value):SuperC(value){}