Frage zu Mehrfachvererbung, virtuellen Basisklassen und Objektgröße in C ++
Der folgende Code druckt 20, d. H. Sizeof (z) ist 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;
}
Wenn ich hier keine virtuellen Basisklassen verwende, d. H. Für den folgenden Code: sizeof (z) ist 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;
}
Warum ist sizeof (z) more (20) im ersten Fall? Sollte es nicht 12 sein, da Base nur einmal in Z enthalten sein wird?