• 运算符重载


    一.一般形式
    返回类型 operator 操作符 (参数列表)
     
    二.成员函数or友元函数?
    • 大部分运算符重载函数既可以是成员函数,也可以使友元函数。使用友元函数的形式如下:
            friend 返回类型 operator 操作符 (参数列表)
            eg:
            成员函数:Int operator + (const Int &);
            友元函数:friend Int operator + (const Int &, const Int &);
             注意:跟成员函数不同的是参数列表。友元函数的参数列表中比成员函数多一个参数,因为成员函数可以通过this指针隐式的访问对象的参数,而友元必须指定。
    • 运算符重载函数定义为成员函数或是友元函数的几点依据:
      •  重载运算符(),【】,->或任意赋值运算符时,必须为成员函数
      • 当运算符重载函数是一个成员函数时,最左边的操作数必须是类的一个对象(或引用),例如上例中+左边为Int。如果左边的操作数必须是一个不同类的对象或内部类型的对象,运算符函数必须是友元函数。(解释:通过成员函数重载的运算符是由运算符左边的对象调用的,该对象通过this指针隐式传递,因此,最左边的操作数必须是一个对象。将运算符重载函数声明为友元函数时,因为没有隐含的this指针,所以必须显示指定所有参数。
      • 对二元运算符,成员函数带一个参数,友元函数带两个参数。对一元运算符,成员函数不带参数,友元函数带一个阐述。

    三.可重载or不可重载的运算符

    不可被重载的运算符:
    .*,    ::,    ?:,    sizeof
     
    四.其他
    1.前置后置运算符如何区分?
    前置:Integer& operator ++ ()            friend Integer& operator ++(Integer & a);
    后置:Integer operator ++ (int)            friend Integer operator ++ (Integer & a, int);
    int只是一个伪值,用于区分前置后置运算符
  • 相关阅读:
    RabbitMQ学习笔记
    Eclipse下JRebel的安装和基本使用
    通过HTTP响应头让浏览器自动刷新
    CentOS6.5安装Jenkins
    Windows快捷操作技巧
    关于代码压缩混淆加密整理;
    一款优雅的小程序拖拽排序组件实现
    记一次 Mac CA证书 问题
    微信小程序-Swiper和下拉刷新组件
    WeUI Picker组件 源代码分析
  • 原文地址:https://www.cnblogs.com/happygirl-zjj/p/4636155.html
Copyright © 2020-2023  润新知