У меня есть следующие классы:
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
. Почему нет двусмысленности?