C ++:在类和超类之间共享字段

时间:2013-04-12 10:00:01

标签: c++ inheritance field

我对类和超类共享字段有点困惑。我原以为这是好的:

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没有字段“value”。 C不继承SuperC中定义的那个?

很多人

2 个答案:

答案 0 :(得分:8)

确实如此,但您只能使用构造函数初始化列表语法初始化当前类成员。

您必须在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){}

答案 1 :(得分:1)

您无法在派生类的构造函数初始化列表中初始化基类成员。

fix1:  最大可以通过将参数传递给BC来初始化派生类中的基类(BC)构造函数。

fix2:在派生类构造函数的主体中分配基类成员,而不是构造函数初始化列表

C::C(double value1):SuperC()
 {
      value = value1;
 }