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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    C#中 @ 的用法
    ASP.NET页面间传值
    ASP.NET中常用的文件上传下载方法
    把图片转换为字符
    把图片转换为字符
    JavaScript 时间延迟
    Using WSDLs in UCM 11g like you did in 10g
    The Definitive Guide to Stellent Content Server Development
    解决RedHat AS5 RPM安装包依赖问题
    在64位Windows 7上安装Oracle UCM 10gR3
  • 原文地址:https://www.cnblogs.com/fzhe/p/2864936.html
Copyright © 2011-2022 走看看