一.類::建構函式
1.編碼規範:宣告變數賦初值
int i=0;
int *p=null; //最新版本為nullptr
malloc申請到的記憶體區域使用memset進行設定
2.物件在定義時進行初始化
完成物件初始化的函式即建構函式
類的物件的初始化只能由類的成員函式來進行;
簡歷物件的同時,自動呼叫建構函式;
類物件的定義涉及到乙個雷鳴和乙個物件名;
由於類的唯一性和物件的多樣性,用類名而不是物件名來作為建構函式名;
預設建構函式:沒有定義建構函式時,編譯器會提共乙個預設建構函式;(c++規定,類必須有乙個建構函式)
只要定義乙個建構函式,c++編譯器就不再提供預設的建構函式;
與定義變數類似,在預設建構函式建立物件時,如果建立的是全域性物件或靜態物件,則物件的位模式全為0,否則物件值是隨機的;
例如:class car;
此類中沒有定義建構函式,編譯器的預設建構函式為在定義物件時給予m_price,m_carnun乙個預設的隨機值。
定義乙個建構函式:
class car;
實現:car::car(int price, int number) //定義放在類的的外部時的格式 「類名::」
建構函式另乙個特殊之處是它沒有返回型別,函式體中也不允許有返回值,但可以有無值返回語句 " return;".
如果建立乙個物件陣列:desk dd[5]; //物件陣列dd,建構函式會被呼叫5次
3.建構函式的初始化列表中資料的初始化順序和宣告的順序相同
例如:class student;
建構函式可以有多個,可以被過載;建構函式可以用於隱式型別轉換;//加關鍵字explicit來防止隱式型別轉換
二.類::析構函式
乙個類可能在建構函式裡分配資源,這些資源需要在物件不復存在以前被釋放;
析構函式也是特殊型別的成員,沒有返回型別,沒有引數,不能隨意呼叫,也沒有過載。只是在類物件生命期結束的時候,由系統自動呼叫;
析構函式名,就是在建構函式名前加上乙個邏輯非運算行「~」,表示逆建構函式。
例如:
4 class student
12 void setid(int id)
13
16 inline int getscore()
17
20 void setscore(int score)
21
24 private:
25 int m_id;
26 int m_score;
27 };
如果類沒有自定義析構函式,編譯器提供乙個預設的析構函式,而且只有乙個。
第七講 建構函式與析構函式
第七講 建構函式與析構函式 掌握 構造和析構函式概念 初始化 作用。理解 構造構函的過載 帶引數的建構函式兩種表達格式。重點 難點 構造和析構函式概念 初始化 作用。通過前兩章的學習,我們已經對類和物件有了初步的了解。在本章中將對類和物件進行進一步的討論。在這一章中將會遇到一些稍為複雜的概念,請同學...
c 建構函式與析構函式
一 建構函式 c 提供建構函式來處理物件的初始化,建構函式是一種特殊的成員函式,與其他的成員函式不同,不需要使用者來呼叫他,而是在建立物件時自動執行。它的特點是 函式名和類名相同,沒有返回值,可以過載 如果程式中未宣告,則系統自動產生出乙個預設的建構函式,預設的建構函式時不帶引數的。比如 stude...
C 建構函式與析構函式
c 規定,每個類必須有預設的建構函式,沒有建構函式就不能建立物件。若沒有提供任何建構函式,那麼c 提供自動提供乙個預設的建構函式,該預設建構函式是乙個沒有引數的建構函式,它僅僅負責建立物件而不做任何賦值操作。只要類中提供了任意乙個建構函式,那麼c 就不再自動提供預設建構函式。類物件的定義和變數的定義...