重载运算符函数的选择

    正如C++ Primer中的例子,当重载 + 时不需要设置为友元,因为可以用public成员operator += 实现,这说明:首先,重载运算符为成员函数时相当于提供一个接口,一定是public的;其次,就是不是一定要声明为friend的,要据具体情况而定。

    当重载运算符为成员函数时,如果遇到调用时第一操作数是数字,则会因为不能进行类型转换而报错,这时通常建议重载为友元函数。当然也可以有另一种解决办法,即增加构造函数以实现类型转换,这样也会带来二义性的潜在危险,比如说,构造函数中形参是double和long两种,被转换数是int型,则编译器会报错,因为不确定调用哪一个构造函数。

    通常,推荐的选择如下:

        1、复制( = )下标( [ ] )调用( ( ) )成员访问箭头( - > )等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误;

        2、对于复合赋值运算符+ =,-=,/=,*=,&=,!=,~=,%=,<<=,>>=”建议重载为成员函数,但是定义为非成员函数也不会报错;

        3、改变对象状态或与给定类型紧密联系的一些操作符,如++ 、--、*(解引用),通常定义为成员函数

        4对于单目运算符,建议选择成员函数

        5对称的操作符,如算术操作符相等操作符关系操作符和位操作符最好定义为普通的非成员函数。

        6、输入输出操作符非成员函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值