加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c++之递增运算符重载

发布时间:2020-12-16 09:06:07 所属栏目:百科 来源:网络整理
导读:#includeiostream using namespace std; class MyInteger { friend ostream operator (ostream cout,MyInteger myInteger); public : MyInteger() { num = 0 ; } // 重载++i运算符 返回引用是为了对同一个数据进行递增操作 MyInteger operator ++ () { num +
#include<iostream>
using namespace std;

class MyInteger {
    friend ostream& operator<<(ostream& cout,MyInteger myInteger);
public:
    MyInteger() {
        num = 0;
    }
    //重载++i运算符
    返回引用是为了对同一个数据进行递增操作
    MyInteger & operator++() {
        num++;
        return *this重载i++运算符,int是占位符,后置递增要返回值
    MyInteger operator++(int) {
        先记录当时结果
        MyInteger tmp = *后递增
        num++再返回记录的结果
        return tmp;
    }
private:
     num;
};

ostream & operator<<(ostream &cout,MyInteger myInteger) {
    cout << "num=" << myInteger.num;
     cout;
}
void test() {
    MyInteger myInteger;
    cout << ++(++myInteger)<<endl;
    cout << myInteger << endl;
}

 test2() {
    MyInteger myInteger;
    cout << myInteger++ << endl;
    cout << myInteger << main() {
    test2();
    system(pause");
    return ;
}

说明:

1.如果

 MyInteger & ;
    }

这里返回的是MyInteger而不是引用MyInteger &,在调用test()时,会输出:

?

也就是没有达到++i类似的效果:先计算,后赋值。这是因为,当执行一遍++MyInteger后,再执行++(++MyInteger) ,此时这里的(++MyInteger)已经不再是原来的MyInteger对象了,所以++(++MyInteger) 的结果是2,而MyInteger的结果是1,因此采用&,操作的就是同一个对象。这之后再调用test(),输出为:

?

要想实现另外一种自增,即i++,先赋值,后计算,就需要重载自增函数,只需要向重载函数中传入int占位符即可。同时,在函数里面,先要记录当前的值,再进行++,最后返回原先记录的值,这里返回的不能是引用,因为假设我们返回的是引用,相当于返回的是tmp的引用,而tmp是一个局部变量,在函数运行完后就会释放,此时再去访问该地址,就不合法了。最后调用test2(),输出为:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读