先看這麼個問題——已知:
class
cbase;
那麼執行cout<<"sizeof(cbase)="《這個應該很簡單,兩個成員變數所佔的大小有嘛——8。可由時候人就是愛犯這個錯誤:這麼簡單的問題人家會問你?再想想……好像c++類裡面有個什麼函式指標,也應該佔位元組吧!?什麼指標來著?忘了(還是水平低不紮實)!流汗中……算了姑且認為是建構函式和析構函式吧。一人乙個加上剛才那8個16個。好笑嗎?這是我犯的錯誤!!!到底c++類的sizeof是多少呢?沒有所謂的函式指標問題嗎?不甘心,編個例子看看:
第一步:給丫來個空的(不好意思上火粗魯了)
class
cbase;
執行cout<<"sizeof(cbase)="為什麼空的什麼都沒有是1呢?查資料……查啊查……ok這裡了:先了解乙個概念:類的例項化,所謂類的例項化就是在記憶體中分配一塊位址,每個例項在記憶體中都有獨一無二的位址。同樣空類也會被例項化(別拿豆包不當乾糧,空類也是類啊),所以編譯器會給空類隱含的新增乙個位元組,這樣空類例項化之後就有了獨一無二的位址了。所以空類的sizeof為1。繼續下一步:
第二步:
還是最初的那個類,執行結果:sizeof(cbase)=8
沒什麼說的,兩個內部變數的大小。難道我記錯了沒有什麼指標問題的存在?再試試(早這麼有求知慾也不會丟人了,這回來勁了)
第三步:添個虛函式
class
cbase;
再執行:sizeof(cbase)=12
嗨!問題出來了!!跟虛函式有關。為什麼呢?查資料ing……
有了:「c++ 類中有虛函式的時候有乙個指向虛函式的指標(vptr),在32位系統分配指標大小為4位元組」噢原來如此害死我了。那麼繼承類呢?
第四步:
基類就是上面的了不寫了
class
cchild :
public
cbase;
執行:cout<<"sizeof(cchild)="《輸出:sizeof(cchild)=16;
可見子類的大小是本身成員變數的大小加上子類的大小。
有空再補一下關於虛函式指標的知識吧。
C 類的大小 sizeof
先看這麼個問題 已知 那麼執行cout sizeof cbase 這個應該很簡單,兩個成員變數所佔的大小有嘛 8。可由時候人就是愛犯這個錯誤 這麼簡單的問題人家會問你?再想想 好像c 類裡面有個什麼函式指標,也應該佔位元組吧!什麼指標來著?忘了 還是水平低不紮實 流汗中 算了姑且認為是建構函式和析構...
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 的大小和成員的大小總和是什麼關係呢,很簡單,乙個物件的大小大...