下面是完整代码:
#include<iostream>
using namespace std;
class MyInteger
{
friend ostream& operator<<(ostream& cout, MyInteger p);
public:
MyInteger()
{
m_A = 10;
}
//前置自增运算符重载
MyInteger& operator++()//返回引用是为了一直对一个数据进行操作
{
//先进行自增操作
++m_A;
//后返回本身
return *this;
}
//后置自增运算符重载
MyInteger operator++(int)//int表示占位参数,可以用于区分前置和后置自增运算符(不能用double或者其他数据类型)
//不可以返回引用,因为返回的temp是局部变量,会被释放,返回局部变量后面的操作会是非法操作
{
//先记录当时结果
MyInteger temp = *this;//不要写成MyInteger temp = m_A;m_A与temp数据类型不同
++m_A;
//最后将初始的结果进行返回
return temp;
}
private:
int m_A;
};
ostream& operator<<(ostream& cout, MyInteger myint)
{
cout << myint.m_A;//不用换行
return cout;
}
void test()
{
MyInteger p;
cout<< p << endl;
}
void test01()
{
MyInteger myint;
cout << ++myint << endl;
cout << myint << endl;
}
void test02()
{
MyInteger myint;
cout << myint++ << endl;
cout << myint << endl;
}
int main()
{
test();
test01();
}
下面是出现问题的局部代码:
ostream& operator<<(ostream& cout, MyInteger myint)
{
cout << myint.m_A;//不用换行
return cout;
}
ostream& operator<<(ostream& cout, MyInteger& myint)
{
cout << myint.m_A;//不用换行
return cout;
}
void test02()
{
MyInteger myint;
cout << myint++ << endl;
cout << myint << endl;
}
第三张图为调用自增函数的代码
第一张图设置的参数没有带引用,后置自增可以成功运行
而第二张图设置的参数带了引用,出现以下报错
暂时还不清楚是什么原因,如果有知道是什么原因的小伙伴,请分享一下下好吗~~