C++主题——重载操作符

C++主题——重载操作符

1.       重载操作符后,操作符的含义不应该被改变。

2.       重载操作符后,优先级和结合性不变。

3.       重载操作符,应注意如果原操作符是一目操作符,那么重载后仍应该是一目的,以此类推,特别注意:冲在操作符时使用默认实参是非法的。

4.       短路操作符被重载后不再具备短路性。

5.       对于选择友元、成员、非成员的形式,需要在重载前衡量习惯、效率等问题。
        成员形式:
                1)=、[ ]、()、->应定义为一个成员形式
                2)+=、-=等复合赋值操作符,通常定义成成员形式
                3)对那些改变类型的数据成员的状态的操作符,如++、--一般也定义为成员形式
       非成员形式:
               4)对称操作符、如相等、关系、位操作符,定义为非成员函数。
               5)io操作必须为非成员。
               6)一般将算术操作符定义为非成员形式。

6.       重载operator + 和 operator +=时,若将其作为成员形式重载,那么返回类型为T&类型、返回值为*this比较好,可以做连续加法,也可提高效率。

7.       默认情况下,对于类对象,复制操作符表示按位copy,取地址操作符返回对象的值,逗号操作符返回最右边的操作数的值。

8.       逻辑判断操作符在容器中应用比较广,所以如果想将类型放在容器中,又进行类似sort等需要判断逻辑大小关心的操作,应该重载大/小操作符。

9.       对于重载<<操作符有比较一致的要求:
        ostream& operator << (ostream& os, const classtype &object){return os;}
        第一个形参是对ostream对象的引用,在该对象上产生输出。它不能使const因为写入输出流会改变流状态。它必须是一个引用,因为不能复制流。
       返回值是ostream的引用,它的值通常是输出操作符的ostream的对象。
10.   对于重载>>操作符有比较一致的要求:
       istream& operator>>(istream& in,const classtype& object)
       {return in}
       需要注意的是,输入操作符必须处理错误和文件结束的可能性。

11.   算术操作符通常产生一个新值,该值是两个参数的计算结果,它不同于任意一个参数。当我们定义了一个符合运算符,又定义了一个算术操作符,则可以通过符合操作符实现算术操作符。

12.   如果定义了相等操作符,那么它应该同时定义不等操作符。同时,应让一个操作符完成比较对象的实际操作,而另一个调用它。
       stl中很多容器用到了相等操作符,所以当想把他放入容器中时,应该定义相等操作符。

13.   下标操作符必须为成员函数,而且为确保它在作用到赋值操作的左右两边时都表现正常,应该定义const和非const版本的下标操作符,他们都返回引用。

14.   箭头操作符必须被定义为成员形式。它看起来像二元操作符,但是注意他是一元的,不接受实参。返回值必须是指向类类型的指针。这时会有递归调用箭头操作符的情况,应避免。

15.   解引用可定义为成员形式。同时重载const和非const形式。

16.   自增自减操作符定义成成员形式,前缀型无参数,后缀型有参数int。返回值为对象的引用。前缀形式返回新值,后缀形式返回旧值。需显示调用后缀形式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值