sizeof中對於類大小的計算

2021-05-26 10:56:23 字數 1842 閱讀 6429

空類:1

沒有虛函式:sizeof(資料成員)的和

有虛函式:sizeof(資料成員)的和+sizeof(v表指標);

類的大小不包含靜態資料成員大小,靜態資料存放

在靜態儲存區。

一、簡單物件

#include

class a

; };

int a::c=123;

int main()

; };

int a::c=123;

class b:public a

; };

int main()

; };

int a::c=123;

class b

; };

class c:public a,public b

;int main()

; virtual void fooa(){};

};int a::c=123;

class b:public a

; };

class c:public a

;class d:public b,public c

;int main()

; virtual void fooa(){};

};int a::c=123;

class b:virtual public a

; virtual void fooa();

int main()

; virtual void fooa(){};

};int a::c=123;

class b:virtual public a

;int main()

{ a a******;

b b******;

c c******;

d d******;

cout《綜合1,2,可見

1.非虛擬繼承時,無論派生類是否定義新的虛函式,基類和派生類總是共享乙個虛函式表,不需要另加指向虛函式的指標。

2.虛擬繼承時,若是派生類只是繼承或重寫基類中虛函式,則基類和派生類是共享乙個虛函式表;若派生類新定義了虛函式,則需要新加乙個虛指標指向新的虛函式表。

注意:在虛繼承的時候,在虛表裡還應儲存指向父類的指標。所以在上例虛擬繼承的第乙個例子中b的大小為20,12+4(int)+4(指向父類的虛指標)=20

1.class k

sizeof(k) = 1;

2. class a

int a;

void a();

sizeof(a) = 4;

3. class b

int b;

virtual void b();

sizeof(b) = 4+4;

4. class c:virtual public b

int c;

virtual void c();

sizeof(c)=4+4+4+4+4;

5. class d:virtual public b

int d;

virtual void d();

sizeof(d)=4+4+4+4+4;

6. class e:public c,public d

int e;

sizeof(e) = 4+2*(4+4+4+4+4)-4;

總結:sizeof 類 = 成員變數+虛函式指標。sizeof 繼承類 = 本身成員變數+父類的大小,如果是虛擬繼成的話,則另外加乙個指向父類指標的大小;當多重繼承的時候,如例6中,所示,這時候只需要,保留乙份指向虛基類b的指標,所以得減掉乙個指標的大小。

使用sizeof 計算類的大小

劍指offer 這本書裡第22頁有講到sizeof 計算類大小的問題,在網上查閱了一些資料,進行了一些總結。歡迎補充指正!1 類的大小 類的sizeof 大小一般是類中的所有成員的sizeof 大小之和,這個就不用多說。確切的說,用sizeof運算子對乙個型別名操作,得到的是具有該型別實體的大小。注...

sizeof 類 的大小

什麼是類的例項化,所謂類的例項化就是在記憶體中分配一塊位址 那我們先看看乙個例子 include class a class b class c public a class d public b,public c int main 程式執行的輸出結果為 sizeof a 1 sizeof b 1 ...

sizeof 類的大小

首先,類的大小是什麼?確切的說,類只是乙個型別定義,它是沒有大小可言的。用sizeof運算子對乙個型別名操作,得到的是具有該型別實體的大小。如果 class a a obj 那麼sizeof a sizeof obj 那麼sizeof a 的大小和成員的大小總和是什麼關係呢,很簡單,乙個物件的大小大...