C++知识点总结(七)

1. 运算符重载:

  • C++运算符操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型(类)是没有办法操作的,但是大多数时候我们需要对类进行类似的运算,这个时候我们就需要对运算符重新定义,赋予其新的功能,来满足要求。
  • C++重载运算符的实质是函数重载,运算符重载实质上是C++的一种多态,叫做静态多态,目的是为了让我们使用同名的函数来完成不同的操作。

2. 类类型对象:

  • 作为参数:
    • 一般情况下传递的都是引用(因为按照引用方式传递,不需要构造临时对象,传参效率高),如果不需要通过形参改变外部的实参,将参数设置成const T&
  • 作为返回值:
    • 如果返回的对象不随函数的结束而销毁,直接返回引用(如this指针);
    • 如果返回的是函数栈上的空间,只能按照值传递的方式返回;

3.什么情况下要返回对象的引用呢?

①允许进行连续赋值

②防止返回对象(返回对象也可以进行连续赋值)的时候调用拷贝构造函数和析构函数导致不必要的开销,降低赋值运算符等的效率

//对于第二点原因:如果用“值传递”的方式,虽然功能仍然正确,但由于return语句要把 *this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,会降低赋值函数的效率。

4. 具体实现:

  • <<:
    • 实现:

                

      //返回值类型为ostream,实现链式调用,因为只有ostream类型的对象才能调用函数,函数结束时返回ostream类型,所以可以持续调用;

  • 调用:

  • +=:
    • 实现:

        ​​​​​​​        

  • 调用:

        ​​​​​​​        

  • +:
    • 实现:

        ​​​​​​​        

            //此处不能返回引用,因为当函数结束时,对象会被销毁,引用该对象其值会成为乱码;

            //函数返回值为右值,此处会调用重载运算符<<的右值引用;

  • 调用:

  • =:
    • 实现:

        ​​​​​​​        

        //此处返回值若不为引用,执行完b=c时会返回一个临时对象,然后将临时对象赋值给a,不符合赋值运算符,因为赋值运算符是c值赋值给b,b值赋值给a,故此处为引用,因为对象a是在main函数中,对象没有被销毁所以引用没问题;

        //只以a = b这种方式使用赋值运算符,赋值运算符重载函数就没必要有返回值,因为在函数体内已经通过this指针对d2进行了修改。但是为了支持连续赋值,即a = b = c,我们就需要为函数设置一个返回值了,而且很明显,返回值应该是赋值运算符的左操作数(先b = c,再a = b),即this指针指向的对象。

  • 调用:

        ​​​​​​​        

  • 前++:
    • 实现:

        ​​​​​​​        

  • 调用:

        ​​​​​​​        

  • 后++:
    • 实现:

        ​​​​​​​        

//注意与前++区分,后++在参数位置有个int类型的占位符

  • 调用:

        ​​​​​​​        ​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值