類的構造函數主要有3種定義形式.
(1)默認構造函數的格式如下:
類名()
這里的類名就是函數名.例如,一下代碼定義了張戶類的默認構造函數:
Account(){ //無返回類型,無參數(內聯函數的形式)
ID=0; //默認ID
strcpy(Name,""); //默認賬戶名
balance=0.0; //默認余額
}
(2)帶參數的構造函數的格式如下:
類名(形式參數表)
同樣,這里的類名也是函數名.例如,一下代碼定義了賬戶類的帶參構造函數:
Account(int ID,char Name[],float balance){ this->ID=ID; strcpy(this->Name,Name); this->balance=balance; }
(3)拷貝構造函數的格式如下:
類名(類名&c
Account(Account &other){ ID=other.ID; strcpy(Name,other.Name); balance=other.balance; }
所謂拷貝構造函數,顧名思義,就是創建一個現有對象的副本.為什么這里用引用形式?
如果改為這樣Account(Account other){...}
,在創建賬戶對象my時傳入一個對象他.這是構造函數需要首先創建函數內的局部變量other,other首先得到t1的值,只有other創建成功菜能執行函數體中的賦值操作.那么創建other需要什么呢?一定會調用Account的構造函數,而且一定是拷貝夠着函數,因為other是要成為t1的副本,這是不會調用默認構造函數.於是在創建other對象的拷貝構造函數中,相同的一幕發生了,需要首先創建另一個耶稱為other的局部對象....,於是陷入死循環.二引用傳遞就不會發生這種情況,因為引用只是鏈接到外部對象,不會創建新對象.
無論用戶自定義的構造函數還是默認構造函數都有以下特點:
(1)在對象被創建是執行,執行一下
(2)構造函數的函數名與類名相同
(3)沒有返回值類型,也沒有返回值
(4)構造函數不能像普通函數那樣被顯示調用
