#include<iostream>
using namespace std;
class P {
public:
int a;
//前置递增
P& operator ++() {
this->a++;
return *this;
}
//后置递增
P operator++(int) {
P temp = *this;
a++;
return temp;
}
};
ostream& operator<<(ostream& os, const P& p1) {
os << p1.a;
return os;
}
int main() {
P p1;
p1.a = 6;
cout << p1++ << endl; //输出p1原始值6
cout << p1 << endl; //输出递增后的p1值7
return 0;
}
对于前置递增要返回P的引用,使类中的数据可以继续进行递增操作
对于后置递增返回的是修改前的值,而不是修改后的值,由于返回的是修改前的值,所以在连续使用后置递增操作符时,第一次会返回原始值,而第二次则返回递增后的值。
同时在写后置递增时,在函数签名中加上int让编译器识别该递增为后置递增
P operator++(int)
对于 << 重载处 const 的理解
对于 临时对象,其生命周期随着表达式结束而结束,所以在某些情况下如果我们没有使用 const 引用来传递该对象,则会出现无法预料的结果或者异常情况。比如,在重载输出运算符时,我们通常使用 ostream& operator<<,这个函数接受一个引用类型的参数,如果我们不使用 const 引用并且传入的是一个临时对象,那么就会引发程序崩溃的问题。
因此,在重载输出或输入运算符等需要使用临时对象的情况下,我们应该使用 const 引用来接收参数。它不仅可以避免一些不必要的拷贝,而且具有保护被引用对象的作用,增加代码的可维护性和可读性。