c 建構函式與析構函式

2021-07-26 18:27:29 字數 2606 閱讀 4860

一、建構函式

c++提供建構函式來處理物件的初始化,建構函式是一種特殊的成員函式,與其他的成員函式不同,不需要使用者來呼叫他,而是在建立物件時自動執行。

它的特點是:函式名和類名相同,沒有返回值,可以過載

如果程式中未宣告,則系統自動產生出乙個預設的建構函式,預設的建構函式時不帶引數的。比如:student t;這是就會呼叫預設的建構函式。在定義物件時指定成員的初始值時,系統不會自動生成乙個有參的建構函式,需要自己生成。

由結果可知:全域性物件的建構函式優先於main函式執行

一、析構函式

析構函式也是乙個特殊的成員函式,它的作用與建構函式相反,它的名字是類名前面加了乙個「~

」符號。

特點:沒有引數,沒有返回型別,不能被過載,如果沒有定義析構函式,編譯器會自動生成乙個預設的析構函式。

當物件的生命週期結束的時候,會自動呼叫析構函式,具體來說一下情況會呼叫:

1)在函式中定義了乙個區域性物件,在函式結束時,物件釋放會呼叫析構函式

2)靜態區域性物件在函式呼叫時物件並不釋放,因此不呼叫析構函式,只在

main

函式結束或者呼叫

exit

函式結束程式時,才呼叫

static

區域性變數的析構函式。

3)如果定義了乙個全域性變數,則在程式的流程離開其作用域(在

main

函式結束或者呼叫

exit

函式時),呼叫該全域性的物件的析構函式。

4)用new運算子動態建立了乙個物件,當用

delete

運算子釋放該物件時,先釋放該物件的析構函式。

析構函式的作用並不是刪除物件,而是在撤銷物件占用記憶體之前完成一些清理工作,使這部分記憶體可以被程式分配給新物件使用。

由結果可知:析構函式與建構函式的順序相反。

析構函式的顯示呼叫:t.~test

一、轉換建構函式

特點:單個引數的建構函式

作用:將任意型別轉換為類型別,不能預設生成。

test t = 10; //初始化,帶乙個引數的建構函式,這裡的轉換建構函式充當的是普通建構函式的作用。

t = 20;// 1、賦值,呼叫轉換建構函式,將

20這個整數轉換成類型別,構建了乙個臨時物件

test(20);2

、呼叫運算子過載,將臨時物件賦值給t物件

一、初始化列表

·const

成員的初始化只能在建構函式初始化列表中進行,必須在每個建構函式中初始化

·引用成員的初始化也只能在建構函式初始化列表中進行

·物件成員(物件所對應的類沒有預設建構函式)的初始化,也只能在構造函

數初始化列表中進行,這裡的物件成員是指類裡面包含的類的物件成員。

**示例:

#includeusing namespace std;

class object

; object(int num = 0):num_(num),knum_(num)

{cout << "object"<

六、拷貝建構函式

功能:使用乙個已經存在的物件來初始化乙個新的同型別的物件

宣告:只有乙個引數並且該引數為該類物件的引用

如果類中沒有說明拷貝建構函式,則系統自動生成乙個預設複製建構函式,作為該類的公有成員。

格式:test(

const test& other)

**例程:

C 建構函式與析構函式

c 規定,每個類必須有預設的建構函式,沒有建構函式就不能建立物件。若沒有提供任何建構函式,那麼c 提供自動提供乙個預設的建構函式,該預設建構函式是乙個沒有引數的建構函式,它僅僅負責建立物件而不做任何賦值操作。只要類中提供了任意乙個建構函式,那麼c 就不再自動提供預設建構函式。類物件的定義和變數的定義...

C 建構函式與析構函式

建構函式 對於c 的建構函式,暫且將其分為以下幾類 1.預設建構函式 2.隱士轉換建構函式 3.拷貝建構函式 4.其它建構函式 1.預設建構函式表示沒有任何引數的建構函式,當自定義任何建構函式以後,將不再自動建立預設建構函式,當然,預設建構函式啥也不幹,程式設計師關心係數頓時大跌。關於預設建構函式還...

c 建構函式與析構函式

1.建構函式 建構函式 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。如果建立乙個類你沒有寫任何建構函式,則系統會自動生成預設的無參建構函式,函式為空,什麼都不做只要寫了乙個其他的某一種建構函式,系統就不會再自動生成這樣乙個預...