鱼C论坛

 找回密码
 立即注册
查看: 1674|回复: 0

[技术交流] 运算符重载

[复制链接]
发表于 2019-6-3 14:39:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Julia999 于 2019-7-31 18:39 编辑
1.一元运算符Obj op 或 op Obj
重载为成员函数,解释为:
Obj.operactor op()

操作对象由对象Obj通过this指针隐含传递
重载为友元函数,解释为:
operactor op(Obj)
操作数由参数表的参数Obj提供


2.二元运算符
ObjL.op ObjR
重载为成员函数,解释为:
ObjL.operactor op(ObjR)
左操作数由ObjL通过this指针传递,右操作数由参数ObjR传递
重载为友元函数,解释为:
operactor op(ObjL,ObjR)
左右操作数由参数传递


运算符函数既可以重载为成员函数,也可重载为友元函数或普通函数
当一元运算符的操作数,或者二元运算符的左操作数是类的一个对象时,以成员函数重载,当一个运算符的操作需要修改类对象的状态时候,应该以成员函数重载。如果以友元函数进行重载,则使用引用参数修改对象(否则就不能真正的修改对象)
当运算符的操作数(尤其是第一个操作数)希望隐式转换,则重载运算符时必须用友元函数。


++运算符成员重载和友元重载的讨论
例如:
类TriCoor 用成员函数重载++的版本是:
Tricoor Tricoor::operactor++()
{ x++;y++;z++;return *this;}  //ok 修改了this指针所指的对象

1.若定义友元函数friend operactor ++()版本
Tricoor operactor ++(Tricoor opl)
{opl.x++;opl.y++;opl.z++;return opl;}
//上面的代码不能真正修改opl中x,y,z的值

3.使用引用参数
Tricoor operactor ++(Tricoor &opl)
{opl.x++;opl.y++;opl.z++;return opl;}








想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 21:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表