目录
运算符重载

函数类型 operator 运算符名称(形参表)
{ 对运算符的重载处理 }

  • 函数名是由 operator运算符 组成的

  • 运算符重载的规则
    1. 不允许用户自定义新的运算符
    2. 不允许重载的5个运算符:
      符号 类型
      . 成员访问运算符
      * 成员指针访问运算符
      :: 域运算符
      sizeof 长度运算符
      ?: 条件运算符
    3. 不能改变 操作数个数
    4. 不能改变 优先级结合性
    5. 不能有默认参数
    6. 参数 至少有一个 是类对象(或者对象的引用)
    7. = 和 & 不必重载

  • 运算符重载的两个方式:
    1. 作为成员函数
      • 可以少写一个函数参数
      • 一般为单目操作符
      • =,[],(),->只能作为成员函数重载
    2. 友元函数
      • 一般为 双目操作符 的重载(为了普适交换律),以及 流插入 “<<” 和 流提取 “>>” 的重载
      • 双目运算符的参数列表必须有 两个参数
    3. 不能是普通函数

  • 单目运算符:++,–的重载
    • 前增:Object operator ++ ();
    • 后增:Object operator ++ ( int );
    • 为了让编译器区别前置和后置,在后置的声明中加入一个 虚参数 ,以示区别
    • 而且后增返回的应该为变化前的对象,此时应该调用复制构造函数:
      1
      2
      3
      Object temp(*this);
      //进行++
      return temp;

  • 流插入 “<<” 和 流提取 “>>” 的重载
    • 必须作为 友元函数

    • 传入两个参数:一个流参数,一个对象,均为 引用

      • 如果要对 临时对象 (如返回对象),进行 “<<”,此时要用const修饰引用的对象(ostream &os,const Object &obj),因为临时对象为 右值且默认const属性, C++ 规定右值不能绑定到非 const 限定的左值引用。
    • 返回的类型要为 ,以便于连续向输出/输出流 插入信息

    • "<<"的重载格式如下:

      1
      2
      3
      4
         ostream& operator<< (ostream &os,Object &obj){
      os<<obj.members;
      return os;
      }
    • ">>"的重载格式如下:

      1
      2
      3
      4
      istream& operator>> (istream &is,Object &obj){
      is>>obj.members;
      return is;
      }

  • 类型转换函数

    operator 类型名()
    {实现转换的语句}
    //operator double(); 将对象转换为double类型。至于怎么转换,自己定义

    • 不能指定类型,没有参数
    • 必须为成员函数,因为转换的主体是本类的对象
文章作者: EasonZzZz
文章链接: http://yoursite.com/2019/12/13/学习/C++学习/运算符重载/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Nice To Meet U