C++运算符重载为非成员函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 using namespace std; 3 class Complex{ 4 public: 5 Complex(double r=0.0,double i=0.0):real(r),imag(i){} 6 friend Complex operator + (const Complex &c1,const Complex &c2); 7 friend Complex operator - (const Complex&c1,const Complex &c2); 8 friend ostream & operator <<(ostream & out,const Complex & c); 9 private: 10 double real,imag; 11 }; 12 Complex operator + (const Complex &c1,const Complex &c2) 13 { 14 return Complex(c1.real+c2.real,c1.imag+c2.imag); 15 } 16 Complex operator - (const Complex &c1,const Complex &c2) 17 { 18 return Complex(c1.real-c2.real,c1.imag-c2.imag); 19 } 20 ostream & operator <<(ostream & out,const Complex & c) 21 { 22 out<<"("<<c.real<<","<<c.imag<<")"; 23 return out; 24 } 25 int main() 26 { 27 Complex c1(5,4),c2(2,10),c3; 28 cout<<"c1="<<c1<<endl; 29 cout<<"c2="<<c2<<endl; 30 c3=c1-c2; 31 cout<<"c3=c1-c2="<<c3<<endl; 32 c3=c1+c2; 33 cout<<"c3=c1+c2="<<c3<<endl; 34 return 0; 35 }