9.7运算符重载
文章目录
1.示例:为SpreadsheetCell实现加法
1.1首次尝试:add方法
略
1.2第二次尝试:将operator+作为方法重载
隐式转换
略
1.3第三次尝试:全局operator+
可交换顺序
2.重载算术运算符
重载简写算术运算符
必须显式地重载简写算术运算符(Arithmetic Shorthand Operators))。这些运算符与基本算术运算符不同,它们会改变运算符左边的对象,而不是创建一个新对象。此外还有一个微妙差别,它们生成的结果是对被修改对象的引用,这一点与赋值运算符类似。
简写算术运算符的左边总要有一个对象,因此应该将其作为方法而不是全局函数。
如果既有某个运算符的普通版本,又有简写版本,建议你基于简写版本实现普通版本,以避免代码重复。
3.重载比较运算符
C++20 中,只需要实现一个额外的重载运算符,operator==。一旦类有运算符 ==和<=>的重载,C++20 就会自动为所有6个比较运算符提供支持
编译器生成的比较运算符
如果可以显式地将 operator<=设置为默认,我建议这样做,而不是自已实现它。通过让编译器为你编写,它将与新添加或修改的数据成员保持同步。如果自己实现运算符,则无论何时添加数据成员或更改现有数据成员,都需要记住更新 operator<→的实现。如果编译器没有自动生成operator,则以上内容对其也适用。
只有当 operator和<=→使用定义操作符的类类型的 const 引用作为参数时,才可能显式将operator和<=>设置为默认。
4.创建具有运算符重载的类型
略