建構函式與析構函式

2021-10-06 13:26:19 字數 2946 閱讀 3735

1.1 定義:與類同名的成員函式是建構函式,在該類的物件被建立時,自動被呼叫。

//在類中建構函式

#include

using

namespace std;

class

information

protected

:int weight;

int high;};

voidfn(

)int

main()

//在類外建構函式

#include

using

namespace std;

class

information

;information::

information()

}voidfn(

)int

main()

注意:建構函式沒有返回型別,所以函式體內不允許出現返回值,但可以出現無值返回語句"return;"又因為建構函式專門用於建立物件和為其初始化,所以它不能隨意被呼叫。

1.2帶引數的建構函式

::可以有多個引數

#include

#include

using

namespace std;

class

information

~information()

protected

:char name[20]

;};int

main()

1.3過載建構函式

建構函式可以被過載。

::建構函式是用來建立物件的,不能用來給物件賦值。

::只有預設了之後才能過載,若有多個缺省會造成錯誤

#include

#include

using

namespace std;

class

date

date

(int m,

int d=15)

//其他公共成員

protected

:int month;

int day;

int year;};

intmain()

1.4 預設建構函式

1. c++規定,每個類必須有乙個建構函式,沒有建構函式,就不能建立任何物件。

2. 若未提供乙個類的建構函式,則c++提供乙個預設的建構函式(無參建構函式),僅負責創造物件,不做任何初始化操作。

3. 只要類定義了建構函式,則不提供預設的建構函式,即若定義了乙個函式,若需要無參建構函式,需要自己定義。

4. 與變數定義類似,在用預設建構函式創造物件時,如果創造的時全域性物件或者時靜態物件,則物件的位模式全為0,否則,物件是隨機的。

#include

using

namespace std;

class

student

;int

main()

//定義類等價於:

class

student

protected

:char name[20];};

::應當對一下情況區別:

#include

#include

using

namespace std;

class

information

/*加上:

information(){};

即可*/

protected

:char name[20]

;};int

main()

1.5 構造類成員
#include

using

namespace std;

class

student

protected

:int semeshour;

int gpa;};

class

teacher};

class

tutorpair

protected

: student s;

teacher t;

int nomeetings;

//會晤次數};

intmain()

每個類負責自己的物件。

如果建構函式開啟了乙個資料夾,就需要關閉該資料夾;或者如果建構函式從堆中分配了記憶體,這塊內存在物件消失前就必須需要被釋放。析構函式允許類自動完成這些清理操作,而不必呼叫其他成員函式。

定義:析構函式也是特殊的類成員函式,無返回型別,沒有引數,不能隨意呼叫,也沒有過載,只是在類物件生命期結束的時候系統自動呼叫。

//定義乙個析構函式

classx~

x()protected

:char

*name;

};

當主函式執行到花括號處,析構函式一次被呼叫。其順序正好與建構函式相反。

ps:本文是學習筆記,內容來自清華大學出版社出版的c++程式設計教程(修訂版)——設計思想與實現。錢能著。

建構函式與析構函式

建構函式 主要作用就是為物件初始化。有一點要說的是,在繼承體系彙總,如果在建構函式中,如果沒有指定基類的建構函式,那麼編譯器會在建構函式開頭加入,基類的預設建構函式,這樣就可以初始化基類物件部分 析構函式 對於析構函式,要說的多點,實際也不太複雜,就是加入了virtual 使其具有了多型性質 inc...

建構函式與析構函式

建構函式 先看看建構函式的呼叫順序規則,只要我們在平時程式設計的時候遵守這種約定,任何關於建構函式的呼叫問題都能解決 建構函式的呼叫順序總是如下 1.基類建構函式。如果有多個基類,則建構函式的呼叫順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。2.成員類物件建構函式。如果有多個成...

建構函式與析構函式

概述 乙個類有兩種特殊的成員函式 建構函式與析構函式。建構函式功能是在建立物件時,給資料成員賦初值,即物件的初始化。析構函式的功能是釋放乙個物件,在物件刪除前,用它做一些記憶體釋放工作,與建構函式的功能相反。建構函式 在物件建立時它會被自動執行,因此變數 物件的初始化 一般都放在建構函式中。1 物件...