類物件模型實驗 類資料成員大小

2021-10-11 03:17:50 字數 931 閱讀 9213

#include #include using namespace std;

/** c++物件記憶體模型 **/

///一、空類位元組大小

class emptyclass ;

///二、物件型別占用位元組大小

//結構體的有效對齊值的確定:

//1)當未明確指定時,以結構體中最長的成員的長度為其有效值

//2)當用#pragma pack(n)指定時,以n和結構體中最長的成員的長度中較小者為其值。資料成員、結構體和類的有效對齊值:自身對齊值和指定對齊值中小的那個值。影響各成員偏移與總大小

class intclass;

class intintclass;

class intcharclass;

class intlongclass;

///三、有虛函式的類的記憶體模型

//對於有虛函式的類,編譯器會為其分配乙個叫虛函式表(virtual table)的東西,編譯器會為這個類本身以及其所有子類插入乙個叫虛函式表指標(vptr)的東西(一般放在類記憶體結構的最前面)。

//如何通過虛函式表和虛函式指標訪問到正確版本的虛函式?編譯器在編譯器就為子類分配好了乙個偏移n,假設虛函式表指標為vptr,某個子類的某個虛函式在虛函式表中的偏移為n,那麼呼叫這個虛函式就相當於(*this->vptr[n])(this)

//每個類無論有多少個虛函式,都只有乙個虛函式表和乙個虛函式表指標;虛函式表跟類走,虛函式指標跟物件走

//32位機器上,vptr大小為4位元組,64位機器上8位元組

class classwithvirtualfunction ;

};class classwith2virtualfunction ;

virtual void donothingfunction2() {};

};int main()

類物件作為類成員

1 含義 在c語言中,乙個結構體可以包含另外乙個結構體。在c 中乙個類的成員,也可以是另乙個類的物件。例如 b類中有物件a作為成員,稱a為物件成員。classa class b 2 建構函式和析構函式生成順序?當其他類的物件作為本類成員,先生成物件成員的類的建構函式,再生成本類的建構函式 析構函式生...

物件導向 例項成員 類方法 類成員

1.語法 1 定義 物件.變數名 2 呼叫 物件.變數名 2.說明 1 首次通過物件賦值為建立,再次賦值為修改.w01 wife w01.name 麗麗 w01.name 莉莉 2 通常在建構函式 init 中建立。w01 wife 麗麗 24 print w01.name 3 每個物件儲存乙份,通...

求類的資料成員的大小

前陣子點點問我乙個問題 對於浦東的變數,我們可以使用sizeof obj 來求其大小 但是對於乙個類的資料成員,卻不能用sizeof 類名 資料成員 的方式來求其大小 有沒有什麼辦法可以實現類似的需求呢?下面是我提供的一種解決方案 但是該解決方案有乙個缺點,就是只能對public的資料成員求值 對於...