• 重载运算符


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

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

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

     

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

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

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

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

  • 相关阅读:
    [附源码]java毕业设计停车场收费管理系统
    一文带你了解隐私 Layer1
    数据分析:从界定问题开始做数据分析?
    docker 搭建 rocketmq
    深入C++02:深入学习C++还必须掌握的基础
    Unity --- 向量
    Web3游戏开发指南【2D】
    Linux——进程间通信(管道及共享内存)
    Android 13 - Media框架(10)- NuPlayer::Renderer
    计算机毕业设计(附源码)python装修信息分享管理系统
  • 原文地址:https://blog.csdn.net/weixin_60630451/article/details/126914675