运算符重载之不思议问题 @_@;

calmman1980 2003-08-13 10:51:07
//先自增
Increase& Increase::operator ++()
{
value ++;
return *this;
}

//先引用
Increase Increase::operator ++(int)
{
Increase temp( *this);
value ++;
return temp;
}
//有一个东西我搞不懂
void main()
{
Increase n(20);
n.display();
(n++).display();//临时对象里的n
n.display();21
++n;
n.display();22
++(++n);
n.display();
}

//运行结果
The value is20
The value is20
The value is21
The value is22
The value is24

//问题
为什么最后一次运行“++(++n)”的结果是24,而不是23?
我认为是23的缘故:
首先,++n,执行了Increase Increase::operator ++(int)这个运算重载n.value自增一次值为23。
接着运算符重载返回的是一个临时对象(temp)。接下来我认为应该是++(temp)即对temp.value
进行了一次自增,而不是对n.value进行自增。所以运算的结果n.value应该是23而不是24,可是调试
结果却是24,实在令人费解。各位大侠可否教教小弟,这是为什么???感激不尽!
...全文
37 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
limd 2003-08-13
  • 打赏
  • 举报
回复
++(++n),两次都是执行了Increase& Increase::operator ++()这个运算重载函数,你自己理解错了。22先自加了两次,结果当然是24。
calmman1980 2003-08-13
  • 打赏
  • 举报
回复
是这样子吗,谢谢
sevecol 2003-08-13
  • 打赏
  • 举报
回复
你的++n执行的是
Increase& Increase::operator ++()
返回的是原对象的引用,所以两次的++()都会对对象产生作用.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧