1. 什麼是類、物件和成員?
類:乙個類包含很多的物件。比如人類就是乙個類,張
三、李四等是人類的物件,這些物件擁有人類共同的功能和資料,如身高、體重、年齡等,而具體化這些資料我們可看做是人類的成員變數。所以類是由若干個變數和相關函式組成,而物件則擁有這些變數和函式。
2. 如何宣告乙個類?
類只有先宣告才能使用它,我們用關鍵字class+類的名字來宣告。
class human
; //注意這裡分號不能漏
宣告這個類並沒有為human分配記憶體,它只是告訴編譯器human這個類是什麼,它包含了哪些資料,功能是什麼。同時還告訴編譯器該類有多大,類的大小事根據類的變數來定的,該類有鏈各個成員變數,它們都是int型,所以共佔8個位元組,該類的方法不占用記憶體,因為getstature()和getweight()沒有宣告型別,它們返回值都是void.
3. 定義乙個物件和成員函式
#includeusing namespace std;
class human
*/ //這樣的話會報錯,必須把該函式的定義放到類的外面
};void human::set(int w)//注意加上字首
4. 建構函式
在建立某個類的物件時,由於對該物件的狀態(資料)不是很明確,因此需要對其進行初始化。比如說外面要在長方形這個類中建立乙個物件,即新建乙個長方形,那麼我們首先要確定它的長和寬,否則我們無法造出乙個長方形出來。
我們要建立這個長方形,就必須使用這個長方形類中乙個用來構造該類所有物件的函式--建構函式,由於該函式要在建立乙個新物件時使用,因此它必須在類中對它進行宣告和定義。比如:我們要宣告並定義乙個長方形類rectangle的建構函式:
#includeusing namespace std;
class rectangle
//建構函式的函式名必須跟類名相同
int area()
private:
int length;
int width;
}int main()
,不會顯示出來,那麼我們建立乙個物件的時候就不能加引數了,只能rectangle a;
只要我們自己建立了乙個建構函式,那麼預設的建構函式就會自動被遮蔽掉。當然我們也可以建立兩個建構函式,乙個帶引數,另乙個不帶引數跟預設的一樣,這樣我們在定義乙個物件的時候,就可以靈活選擇是否給該物件初始化。
5. 析構函式
析構函式與建構函式相反,析構函式用於在物件被銷毀後清除它所占用的記憶體空間,表示為:~rectangle(){} 析構函式與建構函式一樣不能有返回值,且不能有引數,另外,乙個類中只能有乙個析構函式,但{}中可以輸出一些資訊表明析構函式已經執行。整個程式結束後,定義的物件生命自然終止,這時編譯器會自動呼叫該類的析構函式來釋放掉該物件所佔的記憶體,即析構函式銷毀乙個物件。
6. 析構物件陣列
假如我們要一次宣告許多物件,那麼我們可以將這些物件放到乙個物件陣列裡來宣告,如:
#includeusing namespace std;
class test
;test::a()
test::~a()
int main()
執行結果為:
建構函式執行完畢
析構函式執行完畢
建構函式執行完畢
析構函式執行完畢
我們可以看出,系統執行了兩次建立物件,兩次釋放了物件所佔的記憶體
《物件導向程式設計 C 》學習筆記1
組織問題的方法 設計和具體語言實現 物件,而不是控制或資料流,是我們設計和實現的焦點 關注東西,而不是過程.物件互相之間傳送和接收訊息 傳送者傳遞訊息,做不做 怎麼做由接收者決定,這是 蛋圖 的核心 訊息可能導致接收者改變狀態或返回結果 物件是東西,對訊息做出反應 類是東西的種類 一切都是物件 程式...
物件導向程式設計(C )學習筆記一
類 class 是對結構體struct的增強,也是用於自定義型別的。struct object class object 將關鍵字struct改為class,增加訪問修飾符public object obj obj.a 11 obj.b 12 obj.c 13.0 obj.d 14.0 class ...
物件導向程式設計(C )學習筆記三
對於class型別,必須用new delete來建立銷毀物件,malloc free是無法勝任的。new 動態建立乙個物件 1 申請一塊記憶體 2 內部呼叫了建構函式 delete 釋放這個物件 1 呼叫了析構函式 2 釋放記憶體 動態建立乙個物件 circle c new circle 預設建構函...