9.7运算符重载

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.创建具有运算符重载的类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值