#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的資料成員求值 對於...