次のクラスがあります。
class Base
{
public:
Base() { x = 3; }
int x;
virtual void foo() {};
};
class Med1 : public virtual Base
{
public:
int x;
Med1() { x = 4; }
virtual void foo() {};
};
class Med2 : public virtual Base
{
public:
virtual void goo() {};
virtual void foo() {};
};
class Der : public Med1, public Med2
{
public:
Der() {}
virtual void foo() {};
virtual void goo() {};
};
そして、次のコード:
Base* d = new Der;
d->foo();
cout << d->x;
出力:
3
何故ですか?Med1
コンストラクターは、コンストラクターの後に呼び出さBase
れます。私はそれが設定Med1::x
であると推測していますBase::x
が、なぜDer::x
同じでBase::x
あり、そうでないのですかMed1::x
。なぜあいまいさがないのですか?