C++轉換構造函數與類型轉換構造函數

轉換構造函數:函數

 轉換構造函數的只有一個形參:spa

1 Student(float s)
2 {
3     score = s;
4     age = 0;    
5 }

 若是已經在上面定義了構造函數:code

1 Student(85);        //創建對象c1,因爲只有一個參數,調用轉換構造函數

若是對「+」進行了重載,那麼如下是編譯錯誤的:對象

1 stu2 = stu1 + 85;        //這樣編譯錯誤
2 stu2 = stu1 + Student(85);    //合法,將85轉換爲Student類對象

注意:在已定義的相應的轉換構造函數狀況下, 將運算符「+」函數重載爲友元函數,在進行兩個複數相加時,能夠用交換律; blog

   若是是重載爲成員函數的話,那麼交換律不適用;編譯器

 

類型轉換構造函數:編譯

用轉換構造函數能夠將一個類型數據轉換成類的對象,但不能將一個類的對象轉換成一個類型數據;所以咱們須要另外一種方法來實現這種功能:class

C++提供了類型轉換函數來解決這種問題:構造函數

1 operator float()
2 {
3     return score;
4 }

 下面是一個使用類型轉換的簡單例子:float

 1 class Student
 2 {
 3     private:
 4         float score;
 5         int age;
 6     public:
 7         Student(void){age = 18;  score = 0;}
 8         Student(int a, float s){age = a; score = s;}
 9         operator float(){return score;}
10 };
11 
12 int main()
13 {
14     Student stu1(18,  86), stu2(18, 97.5);
15     float f;
16     f = 6.75 + stu2;        //當須要的時候,編譯器會自動調用這些函數
17     cout << f << endl;
18     return 0;
19 }    
20 /*
21 運行結果:
22 104.25
23 Press any key to continue
24 */

 編譯器系統發現有對float的重載,所以調用了這個函數;

注意:operator前面沒有參數。

相關文章
相關標籤/搜索