#include <iostream>
using namespace std;
class MyInteger {
friend ostream &operator<<(ostream &cout, MyInteger myInteger);
public:
MyInteger() {
m_num = 0;
}
//重载前置++运算符,不需要传参
MyInteger &operator++() {
m_num++;
return *this;//将自身进行返回,且必须返回引用
}
//重置后置++运算符,返回值不能作为重载的条件,所以应该在()内加入int,代表占位参数,同时告诉编译器
//这是后置++运算符操作
MyInteger operator++(int) {
//后置++先返回,再递增,但不可能直接return,这样后面的代码就不执行了,所以先记录当时结果
MyInteger temp = *this;
m_num++;
//后置不能返回引用,因为我们这里返回的是局部对象,在当前函数执行完后就没了,所以返回值
//即MyInteger operator++(int)
return temp;
}
private:
int m_num;
};
ostream &operator<<(ostream &cout, MyInteger Int) {
cout << Int.m_num << endl;
return cout;
}
void test01() {
MyInteger Int;
cout << ++(++Int) << endl;
//MyInteger &operator++()返回的是引用,则以下代码输出为2,因为返回引用,是一直对一个数据进行操作
//MyInteger operator++()返回的是值,则以下代码输出为1,此时(++Int)返回的不再是Int,而相对于是
// Int_1,而++(++Int)相对于是++(Int_1),即为Int_2,以下代码可以看成cout << Int_1 << endl(个人理解)
cout << Int << endl;
}
void test02() {
MyInteger Int;
cout << Int++ << endl;
cout << Int << endl;
}
int main() {
test01();
test02();
getchar();
return 0;
}
总结:前置递增返回引用,后置递增返回值