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 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂