选择操作符重载的成员和非成员实现

Select member and non-member impl of operator-override

为类设计重载操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数。

必须定义为普通成员函数

**赋值(=)、下标([])、调用(())、和成员箭头(->)**等操作符必须定义为成员。将这些操作符定义为非成员函数将在编译时标记为错误。

建议定义为成员函数的操作符

复合赋值操作符(+=/-=/*=//=)通常应定义为类的成员。

不一定非要这么做,如果定义非成员复合赋值操作符,不会出现错误。

改变对象状态或与给定类型紧密联系的其他一些操作符。

自增自减解引用,通常应定义为类的成员。

IO操作符必须为非成员函数

因为当我们将IO操作符定义为成员函数后,左操作数只能是该类类型的对象。

在使用上跟我们常规时候的方式截然相反:

1
2
3
4
// IO操作符为成员函数的时候方式
classObject<<cout;
// 常用的IO操作方式
cout<<classObject;

想要使用正常的使用方法,则左操作数必须为osteram类型。如果该操作符是类的成员,则它必须是osteram类的成员,但是osteram是标准库的组成部分,我们是不能为标准库中的类增加成员的。

建议定义为非成员函数的操作符

对称的操作符,如*算数操作符(+-/)相等操作符(==)关系操作符(><)位操作(&)符**,最好定义为普通非成员函数。

全文完,若有不足之处请评论指正。

微信扫描二维码,关注我的公众号。

本文标题:选择操作符重载的成员和非成员实现
文章作者:查利鹏
发布时间:2016/03/21 16:54
本文字数:494 字
原始链接:https://imzlp.com/posts/34001/
许可协议: CC BY-NC-SA 4.0
文章禁止全文转载,摘要转发请保留原文链接及作者信息,谢谢!
您的捐赠将鼓励我继续创作!