-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: first A() : i = 0 then B1() : i = 1 and prints B1::f()- 11 then B2() : prints prints B1::f()- 11

我哪里错了?

谢谢

4

3 回答 3

1

默认情况下在结构中公开。

于 2012-02-19T12:43:26.753 回答
1

它不打印100,它打印10后跟0.

struct 表示字段默认是私有的还是公有的?

上市。

于 2012-02-19T12:44:42.763 回答
1

由于继承,C 对象“包含”一个 B1 对象和一个 B2 对象。B1 和 B2 对象都“包含”一个 A 对象,但是由于您对 A 有虚拟继承,因此每个 C 对象中只有一个 A 对象,而不是两个。这个单一的 A 对象是使用 A 的默认构造函数初始化的。

于 2012-02-19T13:27:00.083 回答