建構函式與析構函式

2021-10-01 15:23:11 字數 1809 閱讀 2226

建構函式常用於對類成員進行初始化操作,其在物件被建立的時刻執行。建構函式的寫法通常是類名(characters…)**如下:

class

example

example()

};intmain()

執行結果:

可以看到,建構函式在物件s1建立的時候即執行。並對成員age進行賦值,之後其他成員函式才能對其進行賦值操作。同樣的,通過堆區指標建立的物件,建構函式也會執行。

值得一提的是,不用去糾結建構函式有沒有返回值的問題,物件建立完畢,函式也就**了,沒有任何意義。

建構函式也可以帶引數:

class

example};

intmain()

建構函式可以有多個,可以過載及預設,對於函式過載以及預設的概念請參考c++函式特性一節的內容。如果我們沒有寫建構函式,那麼系統會預設生成乙個空函式作為建構函式。

同樣地,建構函式可以類內宣告,類外定義,注意定義的時候需要加上作用域運算子,如:

example :: example(int a, float b);

除了通過引數列表傳參的方式進行初始化以外,還可以通過初始化列表的方式進行初始化。

class

example

};

初始化列表的方式初始化優先順序低於傳參,如果同時在初始化的時候傳參並且在建構函式中用該引數對成員賦值,會覆蓋掉初始化列表的初始值。另外,可以預設傳參。**如下,請自行測試:

class

example

};

關於引用的初始化:可以引用成員,引用引數,引用外部變數。使用的時候注意被引物件的作用域。關於引用請檢視c++引用一節。

關於const成員,只能初始化,不能賦值。並且一定要初始化。(最好通過建構函式初始化列表的方式進行初始化)

析構函式在物件被**的時候執行,通常用於清理相關記憶體空間,以及物件生命週期結束時對現場的清理,對於防止記憶體洩漏等程式故障有重要的意義。

**如下:

#include

using

namespace std;

class

example

~example()

//析構函式括號中不能有引數,沒有過載};

intmain()

析構函式與建構函式一樣,如果不進行宣告,編譯器預設補充空函式。

int

main()

malloc不會觸發建構函式,new會;

free不會觸發析構函式,delete會。

this指標用於物件內,表示物件的位址,而*this表示物件本身。

class

example

}

在main函式體中執行其建構函式,可以通過傳參對成員a進行賦值。

關於this:

在物件建立時產生。

型別為對應類的指標型別,指向當前物件。

this指標本身不是成員。

可以做為成員函式的引數。

不能作為類內成員的對映在類外出現。

建構函式與析構函式

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

建構函式與析構函式

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

建構函式與析構函式

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