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...