我有以下類:虛擬繼承和同名成員
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
。爲什麼沒有歧義?
哈!有道理,不知道爲什麼我錯過了。但是我改變了代碼,仍然沒有模棱兩可。如果我有一個指向'Der'的指針,它將打印'4'。猜測'Med1'隱藏'Base :: x'。 – 2012-02-26 22:56:24