C++轉換建構函式與型別轉換建構函式
阿新 • • 發佈:2022-05-03
轉換建構函式:
轉換建構函式的只有一個形參:
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前面沒有引數。