作者lec1987 (述)
看板EE_DSnP
標題[問題]關於operator
時間Sun Apr 13 23:55:25 2008
研究了一下operator overloading
可是還是不甚了解
假如說今天
const ModNum& operator = (const ModNum& n);
我前面沒有宣告成const會如何??
---
還有這個
ModNum& operator + (const ModNum& n);
這個如果前面加上const又是如何呢????
拜託各位了我不是很懂...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.68.36.177
1F:推 spock:粗淺地來說,加了 const 就表示函式不能改該變數的值。 04/14 00:30
2F:→ spock:第一個例子,先看 () 裡面,const ...&... 表示傳進來的變數 04/14 00:31
3F:→ spock:是 reference,你不希望 a = b; 時,動到 b 的值,加 const 04/14 00:32
4F:→ spock:看左邊,這個是超載單元運算子 =,回傳的是 a,加不加 const 04/14 00:35
5F:→ spock:應該都可以達到把 b copy 給 a 的目的。但是加上 const 表示 04/14 00:43
6F:推 spock:你傳回去的 a 不能被別人改變。 04/14 00:45
7F:→ spock:可以思考一下 a = b = c; 會發生什麼事情。 04/14 00:48
8F:推 spock:第二個例子,我覺得用 & 不好,因為這是二元運算子。 04/14 00:51
9F:→ spock:a = b + c; 裡面,你處理的是 b,傳進來的是 c,要傳回去的 04/14 00:52
10F:→ spock:是一個暫時的值叫做 (a + b),然後 copy 給 c。 04/14 00:53
11F:→ spock:這個暫時的 (a + b) 一定是存在於你執行 ...operator+ (...) 04/14 00:53
12F:→ spock:的時候,裡面的某一個變數。一旦離開 ...operator+ ()... 04/14 00:54
13F:→ spock:這個區域變數就死掉了,你傳個死掉的 reference 會出問題。 04/14 00:55
14F:→ spock:至於左邊加 const,也只是希望你傳回去的值不能被別人改動。 04/14 00:56
15F:→ spock:但是在這裡應該不能加,因為你傳回去的值必須是個暫存值。 04/14 00:57
16F:→ spock:有錯請改正,更高深的部分有請高手或老師,謝謝。 04/14 00:58