看板 EE_DSnP 關於我們 聯絡資訊
剛手殘刪掉.. 我寫了個程式 #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)
vuluy:因為你return的是加過之後的吧,應該要return加之前的值啊 11/23 20:48
kickpp:我的看法是覺得你operator ++ (int)寫錯了耶... 11/23 21:08
kickpp:應該是在裡面宣告一個值先傳出d值再把d+1喔 11/23 21:09
kickpp:不然你有想過為什麼要return by value嗎...? 11/23 21:10
ric2k1:推樓上... 應該要先備份,++(*this),再 return 備份 (不是 11/23 21:12
ric2k1:*this) 11/23 21:12
djshen:了解.. 11/23 21:13
concise:或者因為你想測的case簡單可以超偷懶的寫 return d++; (逃 11/23 21:14
djshen:因為原本code裡寫return *(this) 就沒想那麼多.. 11/23 21:27
※ 編輯: djshen 來自: 111.248.11.116 (11/23 21:27)