#include<iostream.h>
class counter
{
private:
int v;
public:
counter(){}
counter(int v)
{
this->v=v;
}
counter operator --()
{
v--;
return *this;
}
counter operator --(int)
{
counter t;
t.v=v--;
return t;
}
void display()
{
cout<<v<<endl;
}
};
void main()
{
counter c1(3),c2(3),c;
c=c1--;
cout<<"c=c1--后,c: ";c.display();
cout<<"c=c1--后,c1: ";c1.display();
c=--c2;
cout<<"c=--c2后,c:";c.display();
cout<<"c=--c2后,c2:";c2.display();
}
注释:
使用运算符前缀时,对对象(操作数)进行增量修改,然后再返回该对象,所以前缀运算符操作时,参数与返回的是同一个对象。这与基本数据类型的运算符前缀类似,返回的也是左值。
使用运算符后缀时,必须在增量之前返回原有的对象值。为此,需要创建一个临时对象,存放原有的对象,以便对操作数(对象)进行增量修改时,保存最初的值。。运算符后缀操作时返回时的原有对象值,不是原有对象,原有对象已经被增量修改,所以返回的应该是存放原有对象值的临时对象。