C 類的大小

2021-10-24 03:16:29 字數 1968 閱讀 6826

有了關於繼承、虛繼承等相關知識的了解。現在我們主要針對類的大小問題來做乙個具體的**吧。

1、真空類

class

cnull

;

大小就是1

主要是因為空類還是要被例項化的,為了保證每個例項在記憶體中都有獨一無二的位址。編譯器就給空類隱含的增加了乙個位元組。

2、空類

class

cnull2

~cnull2()

void

foo()}

;

大小是1

這種情況和空類是差不多的,內部成員函式並不會影響類的大小

1、簡單類

class

conemember

;private

:int m_ione;

};

大小是4

因為有int型成員變數

2、簡單繼承

class

ctwomember

:public conemember

;

大小是8

子類成員接在父類成員之後的。就相當於有兩個int型的整形變數。

3、再繼承

class

cthreemember

:public ctwomember

;private

:int m_ithree;

};

大小是12

孫類成員接在子類之後,再再繼承就依次類推

4、多重繼承

class

classa

;private

:int m_ia;};

class

classb

;private

:int m_ib;};

class

classc

;private

:int m_ic;};

class

ccomplex

:public classa,

public classb,

public classc

;private

:int m_icomplex;

};

大小是16

總結

1、虛繼承

class

ctwomember

:virtual

public conemember

;

大小是12

記憶體結構:

e8 2f 42 00 //指標,指向乙個關於偏移量的陣列,且稱之虛基類偏移量表指標

cc cc cc cc // m_itwo

00 00 00 00 // m_ione(虛基類資料成員)

主要的就是因為存在虛函式指標,其指向了乙個虛函式表存放了三部分的資訊,包括了rtti執行時型別資訊、虛函式指標相對於整體作用域的偏移還有虛函式的入口位址。

2、帶虛函式的空類

class

cvirtualnull

~cvirtualnull()

virtual

void

foo()}

;

大小是4

因為虛函式裡面會存在乙個虛函式指標指向乙個虛函式表。但是請記住,虛函式表只有一張,當子類中又存在乙個虛函式的時候,不會因為增加了新的虛函式而多出來一張表,新的虛函式的指標將新增在複製了的虛表後面。

c 類的大小

初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...

C 類的大小

乙個空類class a 的大小為什麼是1,因為如果不是1,當定義這個類的物件陣列時候a objects 5 objects 0 和objects 1 就在同乙個位址處,就無法區分。單繼承 includeusing namespace std class aprivate char k 3 class...

C 類的大小

前言 c 類所占用的記憶體空間實際上是指類的例項所占用的記憶體空間。其大小是由類中的成員變數決定的 靜態成員變數除外 由於成員函式放到 區由類的各個例項共享,故成員函式對類占用記憶體大小沒有影響。具體地說,類占用記憶體大小由以下三個方面決定 1.非靜態成員變數的記憶體占用之和 2.考慮記憶體對其的問...