運算符重載函數:實現對象之間進行算數運算,(實際上是對象的屬性之間做運算),包括+(加號)、-(減號)、*、/、=、++、--、-(負號)、+(正號)
運算符重載函數分為:普通友元運算符重載函數、成員友元運算符重載函數、成員運算符重載函數
運算符運算符重載函數按運算類型為:雙目運算符重載函數,如加、減、乘、除、賦值; 單目運算符重載函數:自加、自減、取正負號
切記:成員運算符. 和->,sezeof等不能重載。運算符重載函數的參數至少有一個是類類型或引用類型,
下面為友元運算符重載函數舉例:
1 #include<iostream> 2 using namespace std; 3 class Complex 4 { 5 public: 6 Complex(double r=0.0,double i=0.0); 7 void print();
//friend為友元函數的關鍵字,這兩個符號運算符重載函數的參數類型至少有一個類類型或者類的引用 8 friend Complex operator+(Complex &a,Complex &b); 9 friend Complex operator-(Complex &a,Complex &b); 10 private: 11 double real; 12 double imag; 13 }; 14 Complex::Complex(double r,double i) //在類外定義函數,需要用::作用域符號 15 { 16 real = r; 17 imag = i; 18 } 19 Complex operator+(Complex &a,Complex &b) 20 { 21 Complex temp; //創建一個臨時對象 22 temp.real = a.real + b.real; 23 temp.imag = a.imag + b.imag; 24 return temp; 25 } 26 Complex operator-(Complex &a,Complex &b) 27 { 28 Complex temp; //創建一個臨時對象 29 temp.real = a.real - b.real; 30 temp.imag = a.imag - b.imag; 31 return temp; 32 } 33 void Complex::print() 34 { 35 cout<<real; 36 if(imag>0) cout<<"+"; 37 if(imag!=0) cout<<imag<<'i'<<endl; 38 } 39 int main(int agrs,const char *agrv[]) 40 { 41 Complex A1(2.3,4.6),A2(3.6,2.8),A3,A4; 42 A3 = A1 + A2;//A3 = operator+(A1,A2); //對運算符重載函數的調用,前面的為隱式調用,后面的為顯示調用 43 A4 = A1 - A2;//A4 = operator-(A1-A2); 44 A1.print(); 45 A2.print(); 46 A3.print(); 47 A4.print(); 48 49 return 0; 50 }
運行結果:
2.3+4.6i 3.6+2.8i 5.9+7.4i -1.3+1.8i Program ended with exit code: 0
