#include <iostream>
using namespace std;
class A
{
};
class B
{
};
class C:public A,public B
{
};
class D:virtual public A
{
};
class E:virtual public A,virtual public B
{
};
class F
{
public:
int a ;
static int b ;
};
int F::b = 10 ;
int main()
{
cout<<"sizeof(A) = "<<sizeof(A)<<endl ;
cout<<"sizeof(B) = "<<sizeof(B)<<endl ;
cout<<"sizeof(C) = "<<sizeof(C)<<endl ;
cout<<"sizeof(D) = "<<sizeof(D)<<endl ;
cout<<"sizeof(E) = "<<sizeof(E)<<endl ;
cout<<"sizeof(F) = "<<sizeof(F)<<endl ;
return 0 ;
}
解析:
(1)代码第35行,由于A是空类,编译器会安插一个char给空类,用来标记它的每一个对象。因此其大小为1个字节
(2)代码第36行,类B大小和A相同,都是1个字节
(3)代码第37行,类C是多继承A和B,其大小仍然为1个字节
(4)代码第38行,类D是虚继承自A,编译器为该类安插一个指向父类的指针,指针大小为4.由于此类有了指针,编译器不会安插一个char了。因此其大小是4个字节。
(5)代码第39行,类E虚继承自A并且也虚继承自B,因此它有指向父类A的指针与父类B的指针,加起来大小为8个字节
(6)代码第40行,类F含有一个静态成员变量,这个静态成员的空间不在类的实例中,而是像全局变量一样在静态存储区中,被每一个类的实例共享,因此其大小是4个字节。
答案为:
sizeof(A) = 1
sizeof(B) = 1
sizeof(C) = 1
sizeof(D) = 4
sizeof(E) = 8
sizeof(F) = 4