Re: [問題] 運算符號連續重載
※ 引述《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
推
09/07 08:11, , 1F
09/07 08:11, 1F
推
09/07 09:22, , 2F
09/07 09:22, 2F
推
09/07 23:29, , 3F
09/07 23:29, 3F
推
09/08 00:40, , 4F
09/08 00:40, 4F
推
09/08 02:06, , 5F
09/08 02:06, 5F
推
09/09 11:37, , 6F
09/09 11:37, 6F
推
09/09 17:40, , 7F
09/09 17:40, 7F
討論串 (同標題文章)