建構函式和析構函式

2021-10-03 17:17:54 字數 1643 閱讀 9377

類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。如果程式設計師沒有編寫建構函式,則 c++ 會自動提供乙個,這個自動提供的建構函式永遠不會有人看到它,但是每當程式定義乙個物件時,它會在後台靜默執行。

建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。

預設的建構函式沒有任何引數,但如果需要,建構函式也可以帶有引數。這樣在建立物件時就會給物件賦初始值,如下面的例子所示:

#include

using

namespace std;

class

line

;// 成員函式定義,包括建構函式

line::

line

(double len)

void line::

setlength

(double len )

double line::

getlength

(void

)// 程式的主函式

intmain()

當上面的**被編譯和執行時,它會產生下列結果:

object is being created, length =

10length of line :

10length of line :

6

使用初始化列表來初始化字段:

line::

line

(double len)

:length

(len)

上面的語法等同於如下語法:

line::

line

(double len)

假設有乙個類 c,具有多個字段 x、y、z 等需要進行初始化,同理地,您可以使用上面的語法,只需要在不同的字段使用逗號進行分隔,如下所示:

c::c(

double a,

double b,

double c):x

(a),

y(b),z

(c)

過載建構函式

我們知道,當兩個或多個函式共享相同的名稱時,函式名稱被稱為過載。只要其形參列表不同,c++ 程式中可能存在具有相同名稱的多個函式。

任何類成員函式都可能被過載,包括建構函式。例如,某個建構函式可能需要乙個整數實參,而另乙個建構函式則需要乙個 double,甚至可能會有第三個建構函式使用兩個整數。只要每個建構函式具有不同的形參列表,則編譯器就可以將它們分開。

類的析構函式是類的一種特殊的成員函式,它會在每次刪除所建立的物件時執行。

析構函式的名稱與類的名稱是完全相同的,只是在前面加了個波浪號(~)作為字首,它不會返回任何值,也不能帶有任何引數。析構函式有助於在跳出程式(比如關閉檔案、釋放記憶體等)前釋放資源。

除了需要知道在物件被銷毀時會自動呼叫析構函式外,還應注意以下事項:

1、像建構函式一樣,析構函式沒有返回型別。

2、析構函式不能接收實參,因此它們從不具有形參列表。

3、由於析構函式不能接收實參,因此只能有乙個析構函式。

建構函式和析構函式

建構函式沒有返回值,不能被顯示的呼叫。它是在定義物件時由系統自動執行的,而且只執行一次。如果沒有定義建構函式,系統會自動生成乙個建構函式,只是這個建構函式的函式體是空,沒有引數,也不執行任何初始化的操作。帶引數的建構函式 有一種簡練,方便的寫法 建構函式的引數初始化表 box int h,int w...

析構函式和建構函式

每個物件生成的時候都要完成物件的初始化,如設定屬性的初始值。c 中規定每個類都有乙個初始值,如果沒有,系統會產生乙個預設的建構函式。這個建構函式沒有任何引數,不做任何額外的工作。但往往我們會自己寫乙個建構函式,用來進行特殊的初始化工作。這樣的話,編譯器就不會再為其生成預設的建構函式。class 類名...

建構函式和析構函式

stock hot 因為資料部分的訪問狀態是私有的,程式不能訪問資料成員。建立stock的建構函式,由於需要為stock提供3個值,因此應為建構函式提供3個引數值,程式設計師可能指向設定company成員,而其他的設定為0 使用預設引數完成 宣告如下 stock const char co,int ...