C++的递增运算符重载分 前置递增重载和 后置递增重载
前置递增原理:对对象本身进行自增,不断地返回对象本身;
例子:
int a = 0;
cout << "++a=" << ++a << endl;
cout << "a=" << a << endl;
int b = 0;
cout << "++(++b)=" << ++(++b) << endl;
cout << "b=" << b << endl;
第一次++a的时候,++a已经等于1。++(++b)的时候,b=2;可以知道前置递增是对对象b进行++,返回b本身。下一次再递增也是使用这个对象b,再返回这个对象b。
后置递增原理:创建一个新对象 先对原对象本身进行自增,然后返回新对象 ;
例子:
int a = 0;
int b=
cout << "a++=" << a++ << endl;
cout << "a=" << a << endl;
可以看到,(a++)本身就是没有任何变化,a却发生了变化
直观一点,可以创建一个变量b接收(a++)数据本身
int a = 0;
cout << "a=" << a << endl;
int b = a++;
cout << "b=" <<b<< endl;
cout << "a=" << a << endl;
可以看出 ,b接收了(a++)这个数据,但是b的数据值确是原a递增前的数据。 所以可以认为后置递增的原理:定义一个新对象,然后对原先的对象进行了自增,返回的时候返回新对象。
这里注意,虽然返回的是新对象,但是后置递增的过程中原对象却发生了改变。就像 之前输出a++以后,a的值改变了一样,这里需要注意。
代码:
#include<iostream>
using namespace std;
//重载递增运算符
class Person
{
public:
//默认构造
Person()
{
}
//有参构造
Person(int num)
{
Num = num;
}
//前置递增
Person& operator++() {
//对象本身数据进行++运算
this->Num++;
//返回对象本身
return *this;
}
//后置递增
Person operator++(int) { //int 占位参数,区分前置后置递增
//临时对象记录 当前数据
Person temp = *this;
//对象本身数据++
this->Num++;
//返回临时的对象
return temp;
}
int Num;
};
//重载<<运算符;
ostream& operator<<(ostream&cout,Person p) {
cout << p.Num << " ";
return cout;
}
void test01()
{
//前置递增
Person p(0);
cout << "++p=" << ++p << endl;
cout << "++(++p)=" << ++(++p) << endl;
//后置递增
Person p2(0);
cout << "p2++=" << p2++ << endl;
cout << "p2=" << p2<< endl;
}
int main()
{
test01();
return 0;
}
这里要注意前置递增的返回值类型要加&,需要对同一个对象进行操作。