轉換構造函數:
轉換構造函數的只有一個形參:
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前面沒有參數。