一、建構函式
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運算子一起使用在建立物件的語句中。如果建立乙個類你沒有寫任何建構函式,則系統會自動生成預設的無參建構函式,函式為空,什麼都不做只要寫了乙個其他的某一種建構函式,系統就不會再自動生成這樣乙個預...