1. 程式人生 > 其它 >C++轉換建構函式與型別轉換建構函式

C++轉換建構函式與型別轉換建構函式

轉換建構函式:

 轉換建構函式的只有一個形參:

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

 如果已經在上面定義了建構函式:

1 Student(85);        //建立物件c1,由於只有一個引數,呼叫轉換建構函式

如果對“+”進行了過載,那麼以下是編譯錯誤的:

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

注意:在已定義的相應的轉換建構函式情況下, 將運算子“+”函式過載為友元函式

,在進行兩個複數相加時,可以用交換律; 

   如果是過載為成員函式的話,那麼交換律不適用;

型別轉換建構函式:

用轉換建構函式可以將一個型別資料轉換成類的物件,但不能將一個類的物件轉換成一個型別資料;因此我們需要另一種方法來實現這種功能:

C++提供了型別轉換函式來解決這種問題:

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

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

 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前面沒有引數。