作者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)