作者djshen (djshen)
看板EE_DSnP
标题[问题] hw5
时间Wed Nov 23 20:27:34 2011
刚手残删掉..
我写了个程式
#include<iostream>
using namespace std;
class A
{
public:
A(int a){d=a;}
A operator ++(int)
{
cout<<"call ++(int)"<<endl;
d++;
return *(this);
}
bool operator !=(const A& right)
{
cout<<"call !="<<endl;
cout<<"left: "<<d<<" , right:"<<right.d<<endl;
return d != right.d;
}
int d;
};
int main()
{
A a(0),b(1);
if(a++ != b)
cout<<"!="<<endl;
return 0;
}
输出结果是
call ++(int)
call !=
left: 1 , right:1
照理说operator overloading不会改变规则才对..
的确不是precedence问题
如果把A换成int结果就不一样
--
另外一个问题是
我的程式 adta -r 1
产生出来的跟老师的不一样
第二次 adta -r 1 跟老师第一次 adta -r 1 一样
而这部份我们应该都不会动到..
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.248.11.116
※ 编辑: djshen 来自: 111.248.11.116 (11/23 20:28)
※ 编辑: djshen 来自: 111.248.11.116 (11/23 20:38)
※ 编辑: djshen 来自: 111.248.11.116 (11/23 20:47)
1F:推 vuluy:因为你return的是加过之後的吧,应该要return加之前的值啊 11/23 20:48
2F:推 kickpp:我的看法是觉得你operator ++ (int)写错了耶... 11/23 21:08
3F:→ kickpp:应该是在里面宣告一个值先传出d值再把d+1喔 11/23 21:09
4F:→ kickpp:不然你有想过为什麽要return by value吗...? 11/23 21:10
5F:推 ric2k1:推楼上... 应该要先备份,++(*this),再 return 备份 (不是 11/23 21:12
6F:→ ric2k1:*this) 11/23 21:12
7F:→ djshen:了解.. 11/23 21:13
8F:推 concise:或者因为你想测的case简单可以超偷懒的写 return d++; (逃 11/23 21:14
9F:→ djshen:因为原本code里写return *(this) 就没想那麽多.. 11/23 21:27
※ 编辑: djshen 来自: 111.248.11.116 (11/23 21:27)