{
int a;
char *p;
};cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl; 答案 爲8
{
};
運行cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
sizeof(CBase)=1;實例化,所謂類的實例化就是在內存中分配一塊地址,每個實例在內存中都有獨一無二的地址。同樣空類也會被實例化(別拿豆包不當乾糧,空類也是類啊),所以編譯器會給空類隱含的添加一個字節,這樣空類實例化之後就有了獨一無二的地址了。所以空類的sizeof爲1。
3、添加虛函數後
{
public:
CBase(void);
virtual ~CBase(void);
private:
int a;
char *p;
};
再運行:sizeof(CBase)=12,爲什麼?:“C++ 類中有虛函數的時候有一個指向虛函數的指針(vptr),在32位系統分配指針大小爲4字節“
public CBase
{
public:
CChild(void);
~CChild(void);
private:
int b;
};
運行:cout<<"sizeof(CChild)="<<sizeof(CChild)<<endl;
輸出:sizeof(CChild)=16;
可見子類的大小是本身成員變量的大小加上子類的大小。