Вопрос о множественном наследовании, виртуальных базовых классах и размере объектов в C ++
Следующий код печатает 20, то есть sizeof (z) равен 20.
#include <iostream.h>
class Base
{
public:
int a;
};
class X:virtual public Base
{
public:
int x;
};
class Y:virtual public Base
{
public:
int y;
};
class Z:public X,public Y
{
};
int main()
{
Z z;
cout << sizeof(z) <<endl;
}
Принимая во внимание, что если я не использую здесь виртуальные базовые классы, то есть для следующего кода: sizeof (z) равен 16.
#include <iostream.h>
class Base
{
public:
int a;
};
class X:public Base
{
public:
int x;
};
class Y:public Base
{
public:
int y;
};
class Z:public X,public Y
{
};
int main()
{
Z z;
cout << sizeof(z) <<endl;
}
Почему sizeof (z) больше (20) в первом случае? Разве это не должно быть 12, поскольку Base будет включен только один раз в Z?