前言
int a=1;
cout << ++(++a) << endl;
cout << a << endl;
int b=1;
cout << (b++)++ << endl; // 这个是错误的
cout << b << endl;
上面样例中,
前置 ++ 返回的是引用,所以a 的值变成了3
后置 ++ 返回的不是可以改变的左值,所以有问题
正文
我们来看看下面的学习代码
#define CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class MyInterger
{
friend ostream& operator<<(ostream& cout, MyInterger& p);
public:
MyInterger()
{
m_Num = 10;
}
// 前置++ 运算符重置
MyInterger& operator++()
{
m_Num++;
return *this;
}
// 后置 ++ 运算符重置
// 返回值不能作为重载的区分条件
MyInterger& operator++(int) // int 代表一个占位参数,用于区分前置和后置++
{
// 先记录当时的结果
MyInterger* tmp = new MyInterger(*this); // 在堆上分配一个 MyInterger 对象的副本
// 后 递增
m_Num++;
// 最后将记录结果做返回
return *tmp;
}
private:
int m_Num;
};
ostream& operator<<(ostream& cout, MyInterger& p)
{
cout << p.m_Num;
return cout;
}
void test()
{
MyInterger myint;
cout << ++(++myint) << endl;
cout << myint++ << endl;
}
int main()
{
test();
return 0;
}