Morisummer.. 2022-10-05 16: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 00:46
    关注

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

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

    帮我看看现在怎么回事

    回复
    X-道至简 回复 Morisummer.. 2022-10-06 06:11

    这里的temp不是成员变量,在析构函数里面肯定找不到。
    前面我只关注了问题,我仔细看了下如果是后置应该这样写,对内部值加1

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

    如果一定要返回地址的话,要使用的人去释放这个地址了

    回复
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月8日
  • 已采纳回答 10月8日
  • 修改了问题 10月6日
  • 修改了问题 10月6日
  • 展开全部
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部