关于运算符“++”重载的问题
各位,先请看一下例子:
#include<iostream.h>
class counter
{
public:
counter() {v=0;}
counter operator ++();
counter operator ++(int);
void print() {cout<<v<<endl;}
private:
unsigned v;
};
counter counter::operator ++()
{
v++;
return *this; //直接将当前对象的v增1,
}
counter counter::operator ++(int)//counter counter::operator ++(int) 这个参数“int”好像没用到呀?
{
counter t; //在“c++”调用该函数时,
t.v=v++;
return t; //问题所在:(一):调用该函数之前,
//c.v已经由0增到8,现在在该函数内新定义一个对象,即默认该对象的t.v是0,那么执行了 //for循环之后 t.v应该也是8呀,(二)c++调用该函数时,c 和t有什么关系呀?
}
void main()
{
counter c;
for(int i=0;i<8;i++)
++c; //调用counter counter::operator ++()
c.print(); //使c.v从0加到8
for(i=0;i<8;i++)
c++; //调用 counter counter::operator ++(int) 这个参数“int”好像没用到呀?
c.print();
}
运行结果如下:
8
16
疑问:
执行了第一个for 循环时 “++c”里的c.v是8
但是执行第二个for 循环时“c++”里的”++“函数内,自己定义了一个对象t,应该c和t没什么关系呀,而函数的返回值是t,所以结果应该是t.v的值呀,应该也是8呀?不知问什么是16,,,,请各位帮忙,谢谢您!
...全文


