马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Julia999 于 2019-7-31 18:39 编辑
1.一元运算符Obj op 或 op Obj
重载为成员函数,解释为:
操作对象由对象Obj通过this指针隐含传递
重载为友元函数,解释为:操作数由参数表的参数Obj提供
2.二元运算符
ObjL.op ObjR
重载为成员函数,解释为:左操作数由ObjL通过this指针传递,右操作数由参数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;}
|