1094570635 发表于 2022-12-1 17:05:04

*this作为引用返回的问题

#include<iostream>
using namespace std;

//重载递增运算符


//自定义整型
class MyInteger
{
        friend ostream& operator<<(ostream& cout, MyInteger myint);


public:
        MyInteger()
        {
                m_Num = 0;

        }
        //重载前置++运算符返回引用是为了一直对一个数据进行递增操作
        MyInteger& operator++()
        {
                //先进行++运算
                m_Num++;

                //再将自身做返回
                return *this;

        }
        //重载后置++运算符
        // void operator++(int) int代表占位参数,可以用于区分前置和后置递增
        MyInteger operator++(int)
        {
                //先 记录当时结果
                MyInteger temp = *this;


                //后递增
                m_Num++;

                //最后将记录结果做返回
                return temp;
        }


private:
        int m_Num;
};

//重载<<运算符
ostream& operator<<(ostream& cout, MyInteger myint)
{
        cout << myint.m_Num;
        return cout;
}

void test01()
{
        MyInteger myiht;

        cout << ++(++myiht) << endl;
        cout << myiht << endl;


}

void test02()
{
        MyInteger myiht;
        cout << myiht++ << endl;
        cout << myiht << endl;


}

int main()
{
        /*test01();*/

        test02();

        /*int a = 0;
        cout << ++(++a) << endl;
        cout << a << endl;*/


       
        return 0;
}
代码
对于成员函数MyInteger operator++(int),定义了局部变量MyInteger temp,所以不能返回局部变量的引用,
那么对于成员函数MyInteger& operator++(),可以返回*this变量的引用,*this是这个对象本身,this指针是一个局部变量,那么为什么能返回*this的引用呢.

xiaotubie 发表于 2022-12-1 20:27:27

本帖最后由 xiaotubie 于 2022-12-2 11:16 编辑

定义的局部变量是栈中的,函数结束就被销毁,所以外面不能用。
this指向的对象不是局部变量,是函数外面创建的,退出函数对象还是在的。
this是从函数外面作为对象的指针传进来给函数里面用的
页: [1]
查看完整版本: *this作为引用返回的问题