我对类和父类(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){}

09-06 14:32