zoukankan      html  css  js  c++  java
  • 从一个二级题来看成员函数重载运算符和友元函数重载运算符

    先上题:下列运算符都可以被友元函数重载的是:

    A)=,+,-,\

    B)[],+,(),new

    C)->,+,*,>>

    D)<<,>>,+,*

    正确答案为D

    我们知道,在运算符重载,友元函数运算符重载函数与成员运算符重载函数的区别是:友元函数没有this指针,而成员函数有,因此,在两个操作数的重载中友元函数有两个参数,而成员函数只有一个。

    因此,我们可以总结如下:

    1.对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。
      对单木运算符来说,成员函数重载运算符的函数参数表中没有参数,而用友元函数重载运算符函数参数表中含有一个函数。这个问题要搞清楚,有一个this
    指针的问题。。。
    2.双目运算符一般可以用友元函数重载和成员函数重载,但有一种情况只可以用友元函数重载。
      即:双目运算符左边的变量是一个常量,而不是对象!!!这点很重要的额。

    而关于运算符的重载,有以下经验可以记着:

       1.对于单目运算符,建议选择成员函数;
       2.对于运算符“=,(),[],->”只能作为成员函数;
       3.对于运算符“+ =,-=,/=,*=,&=,!=,~=,%=,<<=,>>=”建议重载为成员函数;
       4.对于其他运算符,建议重载为友元函数。

    那么下面这个题的答案也就很明显了:

    将x+y*z中的“+”用成员函数重载,“*”用友元函数重载应该写为:?

    答案为:x.operator+(operator*(y,z))


    作者:凡程子
    出处:http://www.cnblogs.com/fzhe/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    20个最佳的Java集合框架面试题目
    SSL/TLS 加密新纪元
    NServiceBus-日志
    NServiceBus-容器
    NServiceBus-网关和多站点分布
    NServiceBus-性能测试
    NServiceBus教程-持久化配置
    NServiceBus教程-持久化
    NServiceBus教程-NServiceBus和WCF
    NServiceBus教程-消息传递与处理
  • 原文地址:https://www.cnblogs.com/fzhe/p/2864936.html
Copyright © 2011-2022 走看看