次のコードは 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) が more(20) なのはなぜですか? Base は Z に 1 回しか含まれないため、12 であるべきではありませんか?