关于运算符“++”重载的问题

wengchaohui wengchaohui 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

各位,先请看一下例子:
#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,,,,请各位帮忙,谢谢您!
...全文
评论 8
收藏 已收藏
分享
返回顶部
wengchaohui
C++ 语言 65,214 成员 250,514 内容