m0_67001348 2022-08-23 20:44 采纳率: 88.9%
浏览 42
已结题

c++自增运算符重载的问题

#define  _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
using namespace std;
class MyInt
{
    friend ostream& operator<<(ostream& cout, MyInt myint);
private:
    int a=0;
public://前置运算符重载
    MyInt operator++()
    {
        a++;
        return *this;
    }
    MyInt operator++(int)
    {
        MyInt temp = *this;
        a++;
        return temp;
    }
};
ostream& operator<<(ostream& cout, MyInt myint)
{
    cout << myint.a;
    return cout;
}
void test_01()
{
    MyInt myint;
    cout << ++(++myint) << endl;
   cout << myint;
}
int main() {
    test_01();
    
}

有几个问题就是:
1.我在重载前置++这个运算符是故意返回的不是引用数据类型,在多次调用++ (如:我在test—01那里写的第一次cout )再次调用cout,为什么值会不一样(第一次值为2,第二次值为1)
2.返回对象时不是拷贝吗,新建了一个对象赋值给了调用者,这里的myint地址不会被修改吗,为什么

  • 写回答

4条回答 默认 最新

  • [PE]经典八炮 2022-08-23 20:55
    关注

    1.就因为你没返回引用,所以第一次++的并不是myint,而是++myint的返回值,所以myint不受影响。
    2.新建了一个对象是的确,但是你没有赋值给调用者,而且就算赋值了地址也不会修改,所有变量地址都是不变的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月23日

悬赏问题

  • ¥15 如何解决蓝牙通话音频突发失真问题
  • ¥15 安装opengauss数据库报错
  • ¥15 【急】在线问答CNC雕刻机的电子电路与编程
  • ¥60 在mc68335芯片上移植ucos ii 的成功工程文件
  • ¥15 笔记本外接显示器正常,但是笔记本屏幕黑屏
  • ¥15 Python pandas
  • ¥15 蓝牙硬件,可以用哪几种方法控制手机点击和滑动
  • ¥15 生物医学数据分析。基础课程就v经常唱课程舅成牛逼
  • ¥15 云环境云开发云函数对接微信商户中的分账功能
  • ¥15 空间转录组CRAD遇到问题