5

クラスとスーパークラスの共有フィールドについて少し混乱しています。私はこれが大丈夫だと思っていました:

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 で定義されたものを継承しませんか?

多くのthx

4

2 に答える 2

1

派生クラスのコンストラクター初期化リストで基本クラスのメンバーを初期化することはできません。

fix1: 最大 BC にパラメーターを渡すことで、派生クラスの基底クラス (BC) コンストラクターを初期化できます。

修正 2: コンストラクター初期化リストではなく、派生クラス コンストラクターの本体に基本クラス メンバーを割り当てる

C::C(double value1):SuperC()
 {
      value = value1;
 }
于 2013-04-12T10:09:42.620 に答える