Pergunta sobre herança múltipla, classes base virtuais e tamanho do objeto em C ++
O código a seguir imprime 20, ou seja, 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;
}
Considerando que, se eu não usar classes base virtuais aqui, ou seja, para o seguinte código: 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;
}
Por que sizeof (z) mais (20) no primeiro caso? Não deveria ser 12, já que o Base será incluído apenas uma vez em Z?