作者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