zoukankan      html  css  js  c++  java
  • 友元函数与重载运算符【转】

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


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

    对于class中将operator函数定义为friend主要有以下考虑: 
    1.friend function是对外公开的,而class method是属于对象的,有些情况调用不方便  
    2.对某些需要两个参数的operator function,定义friend比较方便,如下例中operator << 
    3.所有class   method必须有匹配的左值类型进行调用而friend则无需这样,只要能隐式转化成当前类型就可以调用该函数,因此如下例构造函数没有定义为explicit的,可以进行隐式转化,就可以在不同类型间运算。   
     
     
    成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。
     
    假如类内重载==号。 if( string("abc") == "cde") 正确  但是if("cde" == string("abc"))错误 所以用友元重载为
  • 相关阅读:
    Codeforces 601B. Lipshitz Sequence(单调栈)
    C++11正则表达式初探
    Codeforces 1051 D.Bicolorings(DP)
    数据库规范——学习小记
    2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)
    10.2路径
    10.1jihe
    8/9三角形
    8/9,集合的运算
    6.2收费
  • 原文地址:https://www.cnblogs.com/guyan/p/2546723.html
Copyright © 2011-2022 走看看