類的sizeof(虛函式,虛繼承,空類是1)

2021-06-08 01:31:04 字數 1458 閱讀 8344

1、空類的sizeof是1。空類是指沒有成員的類,類中的函式不佔空間,除非是虛函式。

如: class a

~a(){}

void fun(){} };

sizeof(a)是1.

注: class a1

~a1(){}

void fun(){}

char a[0]; };

sizeof(a1)也是1.(vc6.0下編譯)

2、若類中包含成員,則類物件的大小只包括其中非靜態成員經過對齊所佔的空間,對齊方式和結構體相同。如:

class a

;sizeof(a)是12.

class a

;sizeof(a)是12.

class a

};sizeof(a)也是12.

3、若類中包含虛函式,則無論有幾個虛函式,sizeof類都等於sizeof(資料成員)的和+sizeof(v表指標,為4),如:

class base;

class a3:public a2;

sizeof(a3)是8. 但如果a3如下:

class a3:public a2;

sizeof(a3)是12.

5、對於子類和父類中都有虛函式的情況,子類的sizeof是它父類成員(無論成員是public或private),再加上它自己的成員,對齊後的sizeof,再加4(虛表指標)。如:

class base

;   

class   b:   virtual   public   a   

;   

class   c:   virtual   public   a   

;   

class   d:public   b,public   c   

;   

int   main(int   argc,   char*   argv)   

{   

cout<

sizeof(b)和sizeof(c)相同,都是4+4+4=12。

sizeof(d)是sizeof(b)(為12)+sizeof(c)(為12)-b和c相同的部分(a的成員,大小是4)+d自己的成員(大小為4)=24

7、對於既有虛繼承又有虛函式的子類,其sizeof的值是其父類成員(計算虛表指標大小+4),加上它自己的成員(計算虛表指標大小+4),以及它自己乙個指向父類的指標(大小為4),對齊後的sizeof

class base

{public:

base(){cout<<"base-ctor"<

class derived:virtual public base

{public:

derived(){cout<<"derived-ctor"<

sizeof(base)=4

sizeof(derived)=12 (父類虛表指標大小4+自己虛表指標大小4+子類指向父類的乙個指標大小4=12)

空類,虛函式類,虛繼承類的空間大小

include using namespace std class a a是空類,編譯器會用乙個char型別標記這個類,大小為1 class b public a b繼承了a,但同樣也是空類,大小為1 class c virtual public a 虛擬繼承的時候編譯器會安插乙個指向父類的指標,大...

虛繼承和虛函式對sizeof的影響

先看例程 include include include include using namespace std class a const int size class a2 class b virtual public a class c public a class d public virt...

虛繼承和虛函式對sizeof的影響

先看例程 include include include include using namespace std class a const int size class a2 class b virtual public a class c public a class d public virt...