9 物件的建立和撤銷,建構函式和析構函式

2022-09-01 05:57:09 字數 2014 閱讀 3243

一是建構函式,在物件建立時自動呼叫,用以完成物件成員變數等的初始化及其他操作(如為指標成員動態申請記憶體空間等);如果程式設計師沒有顯式的定義它,系統會提供乙個預設的建構函式。

另乙個是析構函式,在物件撤銷時自動呼叫,用以執行一些清理任務,如釋放成員函式中動態申請的記憶體等。如果程式設計師沒有顯式的定義它,系統也會提供乙個預設的析構函式。 

當物件被建立時,建構函式自動被呼叫。

建構函式有一些獨特的地方:函式的名字與類名相同,沒有返回型別和返回值,即使是void也不能有。

1>

其主要工作有: 給物件乙個識別符號。

2>

為物件資料成員開闢記憶體空間。

3>

完成物件資料成員的初始化(函式體內的工作,由程式設計師完成)。

上述3點也說明了建構函式的執行順序,在執行函式體之前,建構函式已經為物件的資料成員開闢了記憶體空間,這時,在函式體內對資料成員的初始化便是順理成章了。 備註**給出了point類的顯式建構函式 。

class point 

; point::point()

建構函式可以有引數:

編譯器自動生成的預設(預設)建構函式是無參的,實際上,建構函式可以接收引數,在物件建立時提供更大的自由度,如下列**

一旦使用者定義了建構函式,系統便不再提供預設建構函式。 跟蹤執行,理解建構函式的執行順序。

#include using namespace std;

class point //point類定義,在定義同時實現其成員函式

void print() //輸出資訊

}; #include "point.h"

int main()

建構函式能夠進行過載:

一旦程式設計師為乙個類定義了建構函式,編譯器便不會為類自動生成預設建構函式,

因此,如果還想使用無參的建構函式,如「point pt1;」的形式必須在類定義中顯式定義乙個無參建構函式。

這樣,建構函式就會出現兩個,會不會有問題呢?不會,建構函式支援過載,在建立物件時,根據傳遞的具體引數決定採用哪個建構函式。

例1:

#include using namespace std;

class point

point(int ix, int iy)

void print()

private:

int _ix;

int _iy;

};int main(void)

例2

#include using namespace std;

class point //point類定義,在定義同時實現其成員函式

point() //無參建構函式

void print()//輸出資訊

private: //私有成員,分泌誒代表x軸和y軸座標

int xpos;

int ypos;

};#include "point1.h"

int main()

------------------

建構函式允許按引數預設方式呼叫

上例中的建構函式可以作如下定義:

point(int x=0,int y=0) 

void print()

}; #include "point.h"

int main()

例子:

#include using namespace std;

class point

#endif

point(int ix, int iy)

: _ix(ix)//初始化列表

, _iy(iy)

void print()

private:

int _ix;

int _iy;};

int main(void)

6 物件特性之建構函式和析構函式

物件的初始化和處理也是兩個非常重要的安全問題,c 利用建構函式和析構函式解決上述問題。這兩個函式會被編譯器自動呼叫,如果我們不提供構造和析構,編譯器會提供編譯器提供的建構函式和析構函式是空實現。include using namespace std 物件的初始化和處理 class person pu...

類和物件(3) 物件的構造和析構

如果不用建構函式初始化,該怎麼辦 為每個類都提供乙個public的initialize函式 物件建立後立即呼叫initialize函式進行初始化。缺點1 initialize只是乙個普通的函式,必須顯示的呼叫 2 一旦由於失誤的原因,物件沒有初始化,那麼結果將是不確定的 沒有初始化的物件,其內部成員...

9 物件建立過程和多型

5.多型 重重之重 難點 4.物件建立的過程 了解 4.1單個物件建立的過程 成員變數 新的值 由結果可知優先順序如下 初始化方式 構造塊 構造方法 由結果可知優先順序如下 靜態 塊 構造塊 構造方法 4.2子類物件建立的過程 1 main 方法時程式的入口,當建立物件時會在堆區申請一塊儲存區域 2...