-2

私は次の構造体を持っています

struct A 
{
   int i;
   A() { i = 0; }
   A(int _i) : i(_i) {}
   virtual void f() { cout << i; }
};



struct B1 : virtual A {
   B1() : A(1) { f(); }
   void f() { cout << i+10; }
};


struct B2 : virtual A {
   B2(int i) : A(2) { f(); }
};


struct C : B1, B2 {
   C() : B2(3) {}
};

次のコードが100を出力する理由を説明してください:(10 + 0)

 C* c = new C();

1111を出力する必要があると思います。最初にA():i = 0、次にB1():i = 1で、B1::f()-11を出力し、次にB2():B1::f()11を出力します。

どこが悪いの?

ありがとう

4

3 に答える 3

1

構造体ではデフォルトでパブリックです。

于 2012-02-19T12:43:26.753 に答える
1

印刷せず10010その後に。を印刷し0ます。

構造体とは、フィールドがデフォルトでプライベートまたはパブリックであることを意味しますか?

公衆。

于 2012-02-19T12:44:42.763 に答える
1

継承により、CオブジェクトにはB1オブジェクトとB2オブジェクトが「含まれています」。B1オブジェクトとB2オブジェクトの両方にAオブジェクトが「含まれています」が、Aの仮想継承があるため、各Cオブジェクトには2つではなく1つのAオブジェクトしかありません。この単一のAオブジェクトは、Aのデフォルトコンストラクターを使用して初期化されます。

于 2012-02-19T13:27:00.083 に答える