#include<iostream>
using namespace std;
//--运算符的重载,前置重载和后置重载
class MyInteger
{
friend ostream &operator<<(ostream& cout, MyInteger& p);
public:
MyInteger()
{
m_Num = 10;
}
//前置递减的重载
MyInteger& operator--()
{
--m_Num;
return *this;
}
//后置递减的重载
MyInteger operator--(int)
{
MyInteger tmp = *this;
m_Num--;
return tmp;
}
private:
int m_Num;
};
ostream &operator<<(ostream& cout, MyInteger &myint)
{
cout << myint.m_Num << endl;
return cout;
}
void test01()
{
MyInteger myint;
cout << --myint<< endl;
cout << myint<< endl;
}
void test02()
{
MyInteger myint;
cout << myint-- << endl;
cout << myint << endl;
}
int main()
{
test01();
test02();
system("pause");
return 0;
}
故障截图:
首先说明一点:最好不要局部变量与全局变量重名,虽然语法上允许,但是最好不要,会导致程序可读性降低,比如你重载运算符,形参名字不应该是cout,换个名字不好吗。
这个问题也是因为你代码不规范导致的,因为myint--返回的是一个右值,而运算符重载参数是一个左值引用,通常不加const的左值引用不能绑定一个右值,因为你可能在函数中修改实参。解决方法就是把第二个参数改成const左值引用。这也是代码习惯问题,在函数中不修改实参一定要用const引用,切记!
operator<<()
函数的第二个参数加上const
friend ostream &operator<<(ostream& cout, const MyInteger& p);
ostream &operator<<(ostream& cout, const MyInteger& p);