1、
class CBase
{
int a;
char *p;
};cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl; 答案 为8
{
int a;
char *p;
};cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl; 答案 为8
2、
class CBase
{
};
{
};
运行cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
sizeof(CBase)=1;实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化(别拿豆包不当干粮,空类也是类啊),所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。
3、添加虚函数后
class CBase
{
public:
CBase(void);
virtual ~CBase(void);
private:
int a;
char *p;
};
{
public:
CBase(void);
virtual ~CBase(void);
private:
int a;
char *p;
};
再运行:sizeof(CBase)=12,为什么?:“C++ 类中有虚函数的时候有一个指向虚函数的指针(vptr),在32位系统分配指针大小为4字节“
4、继承
class CChild :
public CBase
{
public:
CChild(void);
~CChild(void);
private:
int b;
};
public CBase
{
public:
CChild(void);
~CChild(void);
private:
int b;
};
运行:cout<<"sizeof(CChild)="<<sizeof(CChild)<<endl;
输出:sizeof(CChild)=16;
可见子类的大小是本身成员变量的大小加上子类的大小。