[問題] hw5

看板EE_DSnP作者 (djshen)時間14年前 (2011/11/23 20:27), 編輯推噓4(405)
留言9則, 5人參與, 最新討論串3/3 (看更多)
剛手殘刪掉.. 我寫了個程式 #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)

11/23 20:48, , 1F
因為你return的是加過之後的吧,應該要return加之前的值啊
11/23 20:48, 1F

11/23 21:08, , 2F
我的看法是覺得你operator ++ (int)寫錯了耶...
11/23 21:08, 2F

11/23 21:09, , 3F
應該是在裡面宣告一個值先傳出d值再把d+1喔
11/23 21:09, 3F

11/23 21:10, , 4F
不然你有想過為什麼要return by value嗎...?
11/23 21:10, 4F

11/23 21:12, , 5F
推樓上... 應該要先備份,++(*this),再 return 備份 (不是
11/23 21:12, 5F

11/23 21:12, , 6F
*this)
11/23 21:12, 6F

11/23 21:13, , 7F
了解..
11/23 21:13, 7F

11/23 21:14, , 8F
或者因為你想測的case簡單可以超偷懶的寫 return d++; (逃
11/23 21:14, 8F

11/23 21:27, , 9F
因為原本code裡寫return *(this) 就沒想那麼多..
11/23 21:27, 9F
※ 編輯: djshen 來自: 111.248.11.116 (11/23 21:27)
文章代碼(AID): #1EpEQwvB (EE_DSnP)
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
問題
4
9
問題
0
1
問題
19年前, 12/16
文章代碼(AID): #1EpEQwvB (EE_DSnP)