• 重载运算符


    首先我们要知道为什么要有重载运算符

    1. C++中标准运算符(如+、—)的操作对象只能是基本数据类型。但对于用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,使它能够用于特定类型执行特定的操作。
    2. 除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算 二元运算符中,第一个操作数为非对象时,必须使用友元函数。如输入输出运算符<<和>>三目运算符"?:"以外,C++中的所有运算符都可以重载

    3. 运算符重载,本质上是函数重载,属于静态多态

     

    接着我们要说重载运算符的原则

    1. 我们只能重载已有的运算符而无权发明新的运算符;对于一个重载的运算符,其优先级和结合律与内置类型一致才可以不能改变运算符操作数个数
    2. 两种重载方式成员运算符和非成员运算符成员运算符比非成员运算符少一个参数;下标运算符、箭头运算符必须是成员运算符;(为什么成员运算符比非成员运算符少一个参数呢,因为当重载的运算符是成员函数时,this绑定到左侧运算符对象。成员运算符函数的参数数量比运算符对象的数量少一个),这点很关键,因为this指针会绑定到左侧运算符对象,所以就会少一个参数
    3. 引入运算符重载,是为了实现类的多态性;如上文所述,运算符重载本质上是函数重载,属于静态多态。(重载和泛型编程就是实现静态多态)(虚函数是动态多态)。运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则
    4. 下标运算符必须是成员函数下标运算符通常以所访问元素的引用作为返回值,同时最好定义下标运算符的常量版本和非常量版本;

    5.  箭头运算符必须是类的成员,解引用通常也是类的成员;重载的箭头运算符必须返回类的指针;

    6.  二元运算符中,第一个操作数为非对象时,必须使用友元函数。如输入输出运算符<<和>>,为什么要用友元函数呢,因为为非成员函数时,需要访问类的数据成员,需要有访问权限,所以往往需要设置为友元

  • 相关阅读:
    牛客网专项练习30天Pytnon篇第16天
    TCP/IP协议到底在讲什么?
    JSP 人力资源管理系统myeclipse开发mysql数据库BS模式java编程网页设计
    前端如何去除本地版本号缓存
    最新适合小白前端 Javascript 高级常见知识点详细教程(每周更新中)
    SpringBoot启动流程梳理-自定义实现@SpringBootApplication注解
    求一份网页设计结课大作业,要求用到html,css,javascript,的知识
    Java之Map集合
    Frida 脚本抓取 HttpURLConnection 请求和响应
    关于 MyBatis,10 种通用的写法分享
  • 原文地址:https://blog.csdn.net/weixin_60630451/article/details/126914675