我有以下类:虚拟继承和同名成员
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