c++ 运算符重载练习之递减运算符重载

本文介绍了如何在C++中重载递减运算符,包括前置和后置递减的区别,以及在自定义类`MyInteger`中的实现,通过示例展示了如何进行测试和注意事项。
摘要由CSDN通过智能技术生成

过年玩了好久,该回来继续学习了。记录一下运算符重载的练习。

一、关于运算符重载

基于我的理解:运算符重载主要是对于常见的已有的运算符,根据他们在已经定义好的功能进行重新定义,让其能够在我们自己定义的数据类型上使用。比如目前练习的这个递减运算符(--),让其不仅保留原有的功能,还适应了我们自己定义的类创建出的对象的--操作。

二、递减运算符重载

递减运算符又分为前置递减运算(先减后用)和后置递减运算(先用后减)。这两种情况重载要分别定义,其中,后置递减运算符重载定义中在参数列表里使用占位参数int占位:MyInteger operator++(int){}以和前置运算符重载的定义做区分。具体实现在代码中使用注释标注。

三、代码实现

/*
  Author: Euan Cai
  Creation time: 2024-02-19
*/

//运算符重载:递减运算符练习
#include <iostream>
using namespace std;

class MyInteger {
    friend ostream& operator<< (ostream& cout, MyInteger integer);

public:
    //构造函数,随便给m_Int赋一个合理的初值,这里使用2;
    MyInteger() {
        m_Int = 2;
    }

    //前置递减重载
    //前置递减为先递减再使用(输出)
    MyInteger& operator--() {
        m_Int--; //先递减
        return *this; //再返回(使用),返回自身
    }


    //后置递减重载
    //后置递减为先使用(输出)再递减
    MyInteger operator--(int) {
        //后置递减重载分成三步实现: (后置递增类似)
        //1、首先记录当前的数据:
        MyInteger temp = *this;

        //2、将当前值递减
        m_Int--;

        //3、返回递减前的值
        return temp;
    }

private:
    int m_Int;
};

//左移运算符重载,用于cout直接输出刚刚定义的MyInteger类
ostream& operator<< (ostream & cout, MyInteger integer) {
    cout << integer.m_Int;
    return cout;
}

//测试前置递减重载
void test01() {
    MyInteger integer; //创建一个MyInteger类的对象,通过构造函数赋初值后该对象里的m_Int值为2;
    cout << --(--integer) << endl; //前置递减输出,连续递减两次,先递减后输出,这里输出为0;
    cout << integer << endl; //经过上一行的两次递减,integer对象内的值减为0,输出0;
}

//测试后置递减重载
void test02() {
    MyInteger integer01;//创建一个MyInteger类的对象,通过构造函数赋初值后该对象里的m_Int值为2;
    cout << integer01-- << endl;//后置递减输出,先输出后递减,这里先输出2;
    cout << integer01 << endl; //通过上一行的递减操作,integer01对象内的值减为1,这里输出1;
}

int main()
{
    test01();
    test02();
    system("pause");
    return 0;
}

四、注意

前置递减返回引用:因为要使其一直对同一个数据进行递减操作,如果返回的是值,则每次返回都调用了拷贝构造函数,对新的数据进行操作,原来的数据本身并没有改变,从而不能实现链式。

后置递减返回值:因为要实现先使用后递减,则必须返回一个递减前的数据拿来使用,参考代码里相应的部分,如果返回temp的引用,而temp是一个局部对象,局部对象在当前函数执行完后立即释放,返回的temp引用也会随之错误,所以只能返回值。

(递增同理)

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值