c 物件模型1

2021-09-25 13:41:35 字數 1148 閱讀 2894

一:類空間大小及證明

1.乙個沒有任何成員函式的類的空間大小是多少?

1位元組2.為什麼是1位元組,而不是0?

因為這個類在記憶體中有記憶體位址,這個記憶體位址最少能存1位元組

3.如果這個類新增三個類成員函式,那麼這個類空間的大小是多少?

還是1位元組,因為類成員函式不占用類物件的記憶體空間

4.還是給這個類新增乙個char 型別的成員變數,那麼這個類的空間大小是多少

還是1位元組,但是這1位元組是char的一位元組,  成員變數是占用類物件的記憶體空間的

(修改char的值追蹤記憶體位址可證明

5.如果將char型別換成int型別 那麼這個類的空間大小是多少?

是4位元組 , 證明同上

6.總結:成員變數包含在每個物件中,是占用物件位元組的,(不同物件的成員變數值不同。

而成員函式雖然也寫在類的定義中,但成員函式不佔物件位元組數(不佔記憶體空間 

(成員函式只誕生乙個,跟著類走,不需要在乎你產生了多少個類物件

二:物件結構的發展和演化

1.非靜態的成員變數(普通成員變數)跟著類物件走(存在物件內部) 也就是每個類物件都有自己的成員變數

class a

int main()

int main() //建構函式 不佔類物件記憶體

virtual ~myobject(){}  //析構函式   vptr 4

float myfunc1()

static int s_getcout() const

virtual void myfunc2(){}  // 虛函式 前面 算過

protected: 

float m_value;   //  float  4

static int ms_scout;

}--------------------------------  總共 : 8位元組 

物件模型:

myobject

virtual void myfunc2(){}

}// 以下是類外部    

myobject(){}

float myfunc1(){}

static int s_getcout(){}

static int ms_scout;

// 因為多型的子類覆蓋父類,所以虛函式需要搞個虛函式表

C 物件模型 第1章 C 物件模型

多重繼承和虛繼承的記憶體布局 c 物件模型 c 虛函式表解析 c 在布局以及訪問時間上主要的額外負擔是由virtual引起的,包括 1 虛函式機制 2 虛基類 這篇文章不錯,本文幾個圖來自這裡 在 c語言中,資料 和 處理資料的操作 函式 是分開來宣告的,也就是說,語言本身並沒有支援 資料和函式 之...

c 物件模型 多型1

a a b b b類是a類的子類 a b b的內容被a類物件進行裁剪,a仍然屬於a類 a.func 呼叫的是a的函式 必須用引用和指標,上述因為是在編譯時就確定好了,所以呼叫的仍然是父類.a a b a.func 這樣可以 對多型的支援 1 型別的隱含轉化 circle作為shap的子類 shap ...

c 物件模型 多型1

a a b b b類是a類的子類 a b b的內容被a類物件進行裁剪,a仍然屬於a類 a.func 呼叫的是a的函式 必須用引用和指標,上述因為是在編譯時就確定好了,所以呼叫的仍然是父類.a a b a.func 這樣可以 對多型的支援 1 型別的隱含轉化 circle作為shap的子類 shap ...