Вопрос о множественном наследовании, виртуальных базовых классах и размере объектов в 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?

Ответы на вопрос(3)

Ваш ответ на вопрос