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

C++ : sharing fields between class and superclasses

本文关键字:之间 共享 字段 超类 c++      更新时间:2023-10-16

我对类和超类共享字段有点困惑。我希望这是好的:

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中定义的继承?

许多thx

可以,但是您只能使用构造函数初始化列表语法初始化当前类成员。

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

不能在派生类的构造函数初始化列表中初始化基类成员。

fix1:最多可以在派生类中通过向BC传递参数来初始化基类(BC)构造函数。

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

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