运算符重载
本帖最后由 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;}
页:
[1]