等號操作符重載為什麽不能用友元函數大揭秘,以及函數沒有等到重載的時候賦值會出現什麽現象(盲點)
阿新 • • 發佈:2018-03-25
style 報錯 round 賦值運算符重載 -c post body opera 為什麽
- 先看下面程序結果輸出什麽?
-
1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 private: 7 int x; 8 public: 9 A(){ 10 x=99; 11 cout<<"看看這裏是否會被調用"<<endl; 12 } 13 }; 14 15 int main() 16 { 17 A a; 18 a = 7; 19 }
這裏面,會報錯,顯示沒有等號匹配現象。只有無參構造函數,函數類型的對象賦值會報錯
-
- 接下來是有無參構造函數和有參構造函數的類
-
#include <iostream> using namespace std; class A { private: int x; public: A(){ x=99; cout<<"看看這裏是否會被調用"<<endl; } A(int xx) { cout<<"Call A(int xx)"<<endl; x = xx; } }; int
運行結果為:
-
-
這裏可以理解為當類中沒有定義等號賦值運算符重載的時候,類對象的賦值會調用相對應的參數構造函數
1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 private: 7 int x; 8 public: 9 A(){ 10 x=99; 11 cout<<"看看這裏是否會被調用"<<endl; 12 }13 A(int xx) 14 { 15 cout<<"Call A(int xx)"<<endl; 16 x = xx; 17 } 18 19 A operator=(int xx) //重載賦值運算符運算 20 { 21 cout<<"Call A operator=(int xx)"<<endl; 22 x = xx; 23 return *this; 24 } 25 26 }; 27 28 int main() 29 { 30 A a; 31 a = 7; 32 }
運行結果:
這裏類中有等號操作符重載,所以會直接調用這個。
如果用友元函數重載等號操作符的時候,程序會調用參數構造函數的,這樣會出錯
等號操作符重載為什麽不能用友元函數大揭秘,以及函數沒有等到重載的時候賦值會出現什麽現象(盲點)