• C++ 类设计总结回顾------运算符重载


      运算符与类相结合,运算符产生新的含义,称之为运算符重载。重载运算符可以使函数的运算看起来更为自然。例如允许使用+将两个对象相加。编译器将根据操作数的数目和类型决定使用哪种加法定义。这种运算符重载隐藏了内部激励,强调了实质。

      运算符重载的格式:类成员函数:返回类型 operator 被重载的运算符(参数) const  (ps:一般在在运算符重载函数的末尾添加const,避免函数通过this指针意外修改数据)

               友元函数: friend 返回类型 operator 被重载的运算符 (参数,const 类型的引用)(ps:这里的const跟上边的const作用相同)

    相同条件下的运算符重载,类成员函数中的参数比友元函数中少一个,少的那个就是this;两种格式的比较,就是说为什么已经有了类成员函数型的运算符重载,还要加上友元函数的运算符重载。在为类重载两元运算符重载时(带两个参数的运算符,比如+ - * /), 例如:C = A + b,其实是被转换成 C = A.operator+b,这里A C是两个class Time型的对象,b是一个int型的数值。但是当遇到C = b + A时,编译器就不知道该怎么做了,是C = b.operator + A吗? 很明显是不可能的。(ps:运算符左侧的操作数就是被调对象);这是就轮到友元函数上场了,friend 返回类型 operator+(int b,const Time & t),两种函数类型的运算符重载完美解决上述问题。

    重载的限制:

    1 重载后的运算符必须至少有一个操作数是用户自己定义的,这是为了防止用户为标准类型冲在运算符,就是不能把+重载为计算两个double类型的差之类重载;

    2 不能修改运算符原来的句法规则,说白了就是不能把一元、二元。。。运算符之间不允许胡乱重载,例如二元运算符不允许重载为一元运算符;

    3 不能创建新的运算符;

    以及:

    运算符 建议
    所有一元运算符 成员函数
    = ( ) [ ]  -> 必须是成员函数
    += -= /= *= ^= &= != %= >>= <<= , 似乎带等号的都在这里了 成员函数
    所有其它二元运算符, 例如: –,+,*,/ 友元函数
    << >> 必须是友元函数

    表格参考:https://www.cnblogs.com/sexybear/p/4551742.html

  • 相关阅读:
    手机端网页web开发要点
    js javascript:void(0) 真正含义
    牛客第二场 C.message(计算几何+二分)
    计算几何_三维凸包
    【kuangbin专题】计算几何_半平面交
    【kuangbin专题】计算几何_凸包
    【kuangbin专题】计算几何基础
    Codeforces 1058 D. Vasya and Triangle(分解因子)
    网络流模板
    2018 Multi-University Training Contest 6
  • 原文地址:https://www.cnblogs.com/Triw/p/9436144.html
Copyright © 2020-2023  润新知