重载运算基本规则

任意重载运算符都至少有一个作用对象是类的成员或类类型,不能全是内置类型,否则重载无意义。

重载运算符如果定义为成员函数,左侧作用对象必须是类的成员或类类型。

非成员函数重载

输入输出运算符

输入输出的重载函数必须是非成员函数。

输入函数必须处理可能的失败情况,输出函数则不需要。

算术和关系运算符

一开始写过,一般也是非成员函数。

如果同时定义算术运算符和复合赋值运算符,在定义算术运算符时通常用到复合赋值运算符。

如果定义了==,不要轻易定义>或<,容易在逻辑上不一致。

成员函数重载

必须定义为成员的运算符

  • 赋值运算符
  • 下标运算符
  • 箭头运算符
  • 函数调用运算符

通常定义为成员的运算符

  • 复合赋值运算符
  • 递增递减运算符
  • 解引用运算符

特殊运算符的实现

下标运算符

下标运算符区分const。

递增递减运算符

递增递减运算符要区分前置后置。

箭头运算符

对箭头运算符的重载必须返回一个指针或一另一个重载了->的类对象。

直接返回指针的情况。

返回另一个重载了->的类对象的情况。

函数调用运算符

重载函数调用运算符,把类对象当成函数使用(可调用对象)。