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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage