1. 双目运算符重载
  1.1格式:

 

L/*左操作数*/ # /*操作符*/ R/*右操作数*/
L#R
=> L.operator#(R) 成员形式,写在类中,成员函数形式
=> operator#(L,R) 非成员形式 //需要定义为类的友元函数
如:
cout << c1;
=> cout.operator<<(c1)
=> operator<<(cout,c1)
1.2实际操作形式:
类名 operator+(const 类名& 对象名)
{ return 类名(...,....);//构建的一个匿名对象}
类名 operator-(const 类名& 对象名)
{ return 类名(...,....);//构建的一个匿名对象}
类名& operator+=(const 类名& 对象名)
{ return *this = *this + 对象名;}
类名& operator-=(const 类名& 对象名)
{ return *this -= *this - 对象名;}

  2. 单目运算符的重载
  2.1格式:

 

#/*操作符*/O/*操作数*/
=>O.operator#();//成员形式
=>operator#(O); //非成员形式
如:
cout << -c1 << endl;
c1.operator-();//成员函数形式
operator-(c1);//非成员函数形式

  2.2实际操作形式:
  类名 operator-(void)
  { return 类名(-...,-...);}
  注意:
  对于运算符重载的两种形式中,优先调用成员函数形式