C 精講3建構函式與析構函式

2021-07-24 11:33:24 字數 1510 閱讀 7344

一.類::建構函式

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 就不再自動提供預設建構函式。類物件的定義和變數的定義...