看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《dinex (我不要成為廢文王)》之銘言: : class MyInt { : int nVal; : public: : MyInt(int n) { nVal = n; } : int ReturnVal() { return nVal; } : int operator - (const int & operand){ : nVal=nVal-operand; : return nVal; : } : }; 1. 先回答你的問題: 讓你的函數回傳自己這個 MyInt (還是不知道的話下面連結可以參考) 2. 你想做的事情類似 Method chaining 不過這種事情一般不會覆載運算子 而會直接寫一個普通的成員函式來做 詳細可看 https://en.wikipedia.org/wiki/Method_chaining 以這例就會變成像是 a.decrement(1).decrement(2).decrement(3); 3. 就算要覆載運算子 這種會改變左邊運算元狀態的運算一般會用帶 = 的指定運算子 以此例基本上就是會覆載 operator -= 來達成 這樣你的使用也會是 a-=1; 這樣直覺 4. 但帶 = 的運算子的結合是右結合 這代表 a-=b-=c; 會是 a-=(b-=c); 因此你還是不能寫 a-=1-=2-=3; 來達成你想做的事 必須要括號起來變成 ((a-=1)-=2)-=3; 才行 5. 如果你想做的不是改變 a 而是回傳一個值 首先 operator - 依然要回傳 MyInt 然後你還得覆載 operator = 這樣你才能寫 MyInt b; b=a-1-2-3; 6. 說實在的, 就算不看 MyInt 單寫 a-1-2-3; 就想有用一定是有什麼地方弄錯了 你看對一個普通的 int a; 寫 a-1-2-3; 也是什麼事都沒有 也是要寫 ((a-=1)-=2)-=3; 才會有用 這就是 operator - 跟 operator -= 的語義不同所在 7. 所以你最好再次思考你想做的到底是 - 還是 -= 還是什麼其他的 再思考這東西要不要串, 能不能串, 串起來又是什麼意思 最後才來思考你要怎麼寫能串的東西 -- LPH [acronym] = Let Program Heal us -- New Uncyclopedian Dictionary, Minmei Publishing Co. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.39.85 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1441581481.A.7CA.html
BlazarArc: 推 09/07 08:11
bibo9901: 推 09/07 09:22
astralbeams: 推 09/07 23:29
xvid: 推 09/08 00:40
yoco: 堆 09/08 02:06
s1000: 錐 09/09 11:37
yichen: 推 09/09 17:40