類的構造函數的定義


類的構造函數主要有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)構造函數不能像普通函數那樣被顯示調用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM