このコード例に出くわしました:
#include <iostream>
using namespace std;
class A {
int x;
public:
A() { x = 1; cout << "A"; }
};
class B : virtual public A {
int y;
public:
B() { y = 2; cout << "B"; }
};
class C : virtual public B, virtual public A {
int z;
public:
C() { z = 3; cout <<"C"; }
};
class D : public A, public B, public C {
int t;
public:
D() { t = 4; cout << "D"; }
};
int main()
{
D d;
return 0;
}
このコードは出力ABABCD
されますが、その理由はわかりません。A
for D : public A
、次にAB
for D : public B
、次にABC
for D : public C
、そして と出力されると思っていましたが、 2 回しか出力されないD
ようです。A
これはどのように作動しますか?