重载操作符时选择成员还是非成员实现

本文探讨了C++中操作符重载的最佳实践,包括赋值操作符、自增自减操作符、算术及比较操作符等的定义方式,并强调了I/O操作符为何应当作为非成员函数。

1、赋值(=),下标([ ]),调用(())和成员访问箭头(->)等操作符必须定义为成员,如果定义为非成员的话,程序在编译的时候,会发生错误。

2、和赋值操作符一样,复合赋值操作符通常定义为成员。与赋值操作符不同的是,不一定飞的这样做,如果定义为非成员,编译器不会报告错误。

3、改变对象状态或者与给定类型紧密联系的其他一些操作符,入自增,自减和解引用,通常定义为类成员

4、对称的操作符,for example:算数操作符、相等操作符、关系操作符和位操作符,最好定义为非成员函数。

5、IO操作符必须定义为非成员函数,我们不能将该操作符定义为类的成员函数,否则,左操作数将只能是该类类型的对象

//if operator<< is a member of Salse_item
Sales_item item;
item<<cout;

这个用法与正常的应用正好相反,如果需要支持正常的用法,则左操作数必须是ostream类型。这意味着,如果该操作符是类的成员,则他必须是ostream类的成员,然而,ostream类是标准库的组成部分,是不能为标准库中的类增加成员的。

将该函数在类内部设置为friend,访问类私有的数据成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值