我有以下课程:
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