I持って、次のクラス:仮想継承と同じ名前のメンバー
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
のですか?コンストラクタBase
の後にMed1
コンストラクタが呼び出されます。私はそれがBase::x
ではなくであると推測していますが、Der::x
はBase::x
と同じで、Med1::x
と同じではありません。なぜあいまいさがないのですか?
ハ!理にかなって、なぜ私はそれを逃したのか分からない。しかし、私はコードを変更しましたが、あいまいさはありません。 'Der'へのポインタがあれば' 4'を表示します。 'Med1'は' Base :: x'を隠しています。 –