一、構造函數
1、構造函數的特點
(1)構造函數是類的一個特殊的成員函數,函數名與類名相同;
(2)構造函數的通路屬性應該是公有(public)通路屬性;
(3)構造函數的功能是對對象進行初始化,是以在構造函數中隻能對資料成員做初始化,這些資料成員一般為私有成員,在構造函數中一般不做初始化以外的事情;
(4)構造函數可以在類内定義也可以在類外定義;
(5)構造函數無函數傳回類型。注意:是什麼也不寫,也不可寫void;
(6)在程式運作時,當新的對象被建立,該對象所屬的類的構造函數自動被調用,在該對象生存期中也隻調用這一次。
(7)構造函數可以重載。類中可以有多個構造函數,它們由不同的參數表區分,系統在自動調用時按一般函數重載的規則選一個執行。
2、使用初始化表來實作對資料成員的初始化
初始化表的一般格式:
類名::構造函數名(參數清單):初始化表
{
構造函數其他實作代碼
}
初始化表的格式:
對象成員1(參數名或常量),對象成員2(參數名或常量),……對象成
員n(參數名或常量)
例如:定義的構造函數可以改用以下形式:
Cdate:: Cdate(int y, int m,int d): year(y), month(m),day(d){ }
注意:這種寫法友善、簡潔。許多C++程式員喜歡用這種方式初始化所有的資料成員。除了構造函數可以使用初始化表外,類的其他成員函數也可以根據需要使用初始化表。
3、組合類的構造函數初始化
類對象内部嵌套類對象,被嵌套的對象成為内嵌對象。内嵌對象是該類對象的組成部分,當建立該對象時,其内嵌對象也被自動建立。
C++中通過構造函數的初始化表為内嵌對象初始化。組合類的帶有初始化表的狗仔函數的定義格式為:
類名::構造函數名(全部參數表):内嵌對象1(參數表1),内嵌對象2(參數表2),...
{ 構造函數體 };
聲明格式為:
類名::構造函數名(全部參數表);
組合類構造函數的執行順序為:
1)按内嵌對象的聲明順序依次調用内嵌對象的構造函數;
2)執行組合類本身的構造函數。
二、析構函數
1、析構函數的作用
析構函數是一個特殊類成員函數,它的作用與構造函數相反。析構函數的作用是在對象生存期結束之前自動執行,做清理工作。
例如:
一個類可能在構造函數中配置設定資源,這些資源要在對象的生存期結束
以前釋放,釋放資源的工作就是自動調用類的析構函數完成的。
2、析構函數的特點
(1)析構函數函數的名字特别,是類名加“~”字元,表明它與構造函數相反;
(2)析構函數沒有參數,不能指定傳回值類型;
(3)一個類中隻能定義一個析構函數,是以析構函數不能重載;
(4)在對象生存期結束時,系統自動調用析構函數。