一:類空間大小及證明
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 ...