Morisummer.. 2022-10-06 00:31 采纳率: 85.2%
浏览 20
已结题

c++中重载运算符的相关问题

#include<iostream>
using namespace std;

class Myint
{
    friend ostream& operator<<(ostream& cout, Myint& myint);
public:
    Myint()
    {
        m_num = 0;
    }

    Myint& operator++()//前置递增
    {
        ++m_num;//先+
        return *this;//再返回
    }

    Myint operator++(int)//后置递增
    {
        Myint* temp;
        temp = new Myint(*this);//先记录当前数值
        m_num++;//再+
        return *temp;//再返回记录的数值
    }

private:
    int m_num;
};

ostream& operator<<(ostream& cout, Myint& myint)
{
    cout << myint.m_num;
    return cout;
}

void test01()
{
    Myint myint;
    cout << myint << endl;
    cout << ++myint << endl;
    cout << myint++ << endl;
    cout << myint << endl;
}

int main()
{
    test01();
    return 0;
}

之前我在定义temp时就是简单的定义一个临时变量,然后有人跟我说匿名临时变量不能引用,后来我把重载左移运算符的myint变量前的引用去掉,确实可以运行。
然后我就想是不是把temp变量存到堆区就可以不被删除了呢,是不是就可以取引用了呢,于是有上面的代码。结果报错原因和最开始一样,这到底是怎么回事啊

img

报错说temp是未定义的标识符

  • 写回答

1条回答 默认 最新

  • X-道至简 2022-10-06 08:46
    关注

    下面这段代码,函数需要返回一个指针地址 Myint*
    如果return *temp; 这么返回,还是一个临时变量的拷贝
    return temp; 这样才是返回地址,在堆区

    
    Myint operator++(int)//后置递增
        {
            Myint* temp;
            temp = new Myint(*this);//先记录当前数值
            m_num++;//再+
            return *temp;//再返回记录的数值
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月8日
  • 已采纳回答 10月8日
  • 修改了问题 10月6日
  • 修改了问题 10月6日
  • 展开全部

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程