類和物件(上)
阿新 • • 發佈:2018-12-18
一、類和物件
C語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函式呼叫逐步解決問題
C++是基於物件的,關注的是物件,將一件事拆分成不同的物件,靠物件之間的互動完成
二、類的定義
注意:(1)C++相容C中所有的語法
(2) C中struct是結構體
(3)C++struct和class都是類,但struct還可以認為是結構體
(4)struct預設是public ,class預設是private
class Name
{
//類的成員函式和成員變數
}; //注意分號
類定義的兩種方式:
1.宣告和定義全部放在類中
2.宣告放在標頭檔案中,定義放在.cpp中 (常用)
三、類的訪問限定符及其特性
1.面向物件的三大特性:封裝、繼承、多型
2.訪問限定符:public、private、protected
說明:(1)public修飾的成員在類外可以直接被訪問
(2)protected和private修飾的成員在類外不能直接被訪問
(3)class預設的訪問許可權是private,struct為public(因為struct要相容C)
3.類的作用域
類定義了一個新的作用域,類的所有成員都在類的作用域中。在類外定義成員,需要使用::作用域解析符指明成員屬於哪個類域。
注意:(1)儘量避免成員函式的引數與成員變數同名
(2)成員變數前加 ‘_’ 下劃線
(3)成員變數在類中具有全域性作用域屬性
四.類的例項化
用類型別建立物件的過程,稱為類的例項化
1.類只是一個模型一樣的東西,跟圖紙一樣,定義出一個類並沒有分配實際的記憶體空間來儲存它
2.一個類可以例項化多個物件,例項化出的物件,佔用實際的物理空間
3.成員變數是獨立的,成員函式是共享的
class Person { public: void Print() //共享的 ,這些是定義 { cout << _name << _sex << _age <<endl; } private: char* _name; // 獨立的 , 這些是宣告 char* _sex; int age; }
五、如何計算類的大小
結論:一個類的大小,實際上就是該類中 “成員變數” 之和,當然也要進行記憶體對齊。
空類比較特殊,編譯器給了空類一個位元組來唯一標識這個類
結構體記憶體對齊規則:
(1)第一個成員在與結構體偏移量為0的地址處
(2)其他成員變數要對齊到某個數字(對齊數)的整倍數處
對齊數=編譯器預設的一個對齊數與該成員大小的較小值 VS預設為8,gcc預設為4
(3)結構體的總大小為:最大對齊數(所有變數型別最大者與預設對齊引數的較小值)的整數倍
(4)如果嵌套了結構體,巢狀的結構體對齊到自己最大對齊數的的整數倍處
六、this指標(重要)
1.C++編譯器給每個成員函式增加了一個隱藏的指標引數,讓該指標指向當前物件(呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該指標。該指標不需要使用者來傳遞,編譯器自動完成。
2.this指標的特性
(1)this指標的型別:類型別* const
(2)只能在“成員函式” 的內部使用
(3)總是指向當前物件,不屬於物件的一部分,不影響sizeof結果
(4)this指標是成員函式第一個隱含的指標形參,一般由編譯器通過ecx暫存器自動傳遞