C 中的建構函式與析構函式

2021-08-07 04:02:53 字數 1599 閱讀 7356

什麼是建構函式與析構函式?

前面我們說過,在類的定義時,我們不能對成員資料進行初始化。但有時候,我們又需要對成員資料進行初始化,這時候建構函式就派上用場了。建構函式的功能就是在建立物件時,用給定的引數值對類裡的資料進行初始化。析構函式會在類的物件的生命週期結束時自動呼叫,我們可以利用這一特點來做些記憶體釋放的工作。

1.建構函式

建構函式會在物件建立時自動呼叫,我們一般將變數、物件的初始化**放在建構函式裡。

在c++裡,建構函式必須與自己所在的類同名,它可以帶引數,也可以不帶引數,值得一提的是,儘管建構函式的名字是固定的,必須與與其所在類的名字相同,但建構函式卻可以有多個

示例:

class cmyclass

private:

int para1;

};

建構函式既可以帶引數,也可以不帶引數,既可以帶乙個引數,也可以帶不同的引數,還可以帶不同的引數。如上所言,在同乙個類裡,可以有許多的構造引數。如下所示:

class cmyclass

cmyclass(char *s1, char *s2)//帶多個引數的建構函式

private:

int para1;

char *str1,*str2;

};

特點:

(1).當建構函式過載時,應避免二義性

(2).建構函式沒有也不需要指定返回值型別

(3).當類用於定義物件時,建構函式必須為共有型,只有這樣類才能示例化,換句話說,只有這樣,物件才能用這個類來定義。當這個類只用於派生其他類時,建構函式可定義為保護型成員函式。

1.2 預設建構函式

如果你自己並沒有定義建構函式,那麼編譯會自動隱式生成乙個不帶引數的預設建構函式,其意義在於滿足語法需要,因為我們在生成物件時,通常如下:

cmyclass myclass;//生成物件
只有在類中包含乙個

cmyclass()

方能合法。

在我們自己創造了建構函式之後,預設的建構函式不再存在,

cmyclass myclass;//生成物件
會因為找不到預設的建構函式而出現編譯錯誤,這時需要我們人為地新增乙個不帶任何引數的建構函式,即顯式的預設建構函式,只有這樣,上述語句才 不會造成編譯錯誤。

2.析構函式

建構函式有且僅有乙個,如果我們不人為新增,則編譯會自動生成乙個隱式的預設析構函式。

析構函式是在類名稱前加乙個」~「邏輯非的符號。示例:

class

cmyclass

//........

};

特點:

(1)沒有任何引數,不返回任何值。

(2)在類的物件呼叫結束時,析構函式會被自動呼叫。

根據第二個特點,我們在析構函式的結構體裡新增delete函式來釋放物件,從而達到清理記憶體的效果。

C 中建構函式與析構函式

建構函式主要功能 在建立物件的時候,給物件變數賦值。析構函式主要功能 當物件脫離其作用域時 例如物件所在的函式已呼叫完畢 系統自動執行析構函式,在此物件撤銷的時候釋放所占用的資源 在建立乙個類的物件時,首先呼叫建構函式對這個物件進行初始化。當這個物件的生命週期結束時,呼叫析構函式。例如,定義了乙個類...

C 中的建構函式(構造器)與析構函式(析構器)

該文章的程式 是按繼承中的基類子類來寫的。跟基本的建構函式與析構函式一樣。只是加了一丟丟東西。現在我們直奔主題!c 建構函式和析構函式主要負責構建物件和銷毀物件,在構建物件的時候系統自己呼叫類中的建構函式。在物件作用域結束後,呼叫析構函式銷毀物件。一般來說,建構函式用來完成事先的初始化和準備工作 申...

c 中的建構函式與析構函式

1 宣告和定義乙個建構函式 1.1 宣告乙個建構函式 建構函式沒有返回值型別 建構函式的名稱必須與類名稱相同 如 class student 呼叫該建構函式,將會為類分配記憶體空間,分配的記憶體空間主要是根據 成員變數的大小和成員函式的大小進行分配。1.2 顯式和隱式的呼叫建構函式 顯式呼叫 stu...