根據對this線程的回覆,operator=
不能作爲非成員函數重載。舉例來說,下面讓編譯器非常生氣:Overloading operator = as非會員
class MyClass
{
// ...
};
MyClass& operator=(MyClass& Left, MyClass& Right)
{
// ...
}
這是爲什麼?我有一個容器類與getter和setter,所以一個成員函數是不必要的,它會打破封裝。上述線程的答案之一表示,它要確保「L值作爲其第一個操作數」,但我不完全明白這意味着什麼。有人可以澄清嗎?
此外,有operator=
,operator()
,operator[]
和operator->
「古怪」 的情況下......?或者,我應該執行所有重載操作符作爲成員函數...? (我知道這是完全合法的做法,但我正在尋找更好的做法。)
也看到這個線程http://stackoverflow.com/questions/3938036/rationale-of-enforcing-some-operators-to-be-members – UmmaGumma 2011-03-21 16:45:49
我認爲getter/setter方法破壞封裝超過賦值運算符。注意:如果你沒有定義一個你的類已經有一個賦值操作符。嘗試一下。 – 2011-03-21 16:50:57
成員函數不會破壞封裝;他們是它的一部分。偏好打造「非成員,非友元函數」可能會導致更簡單的類,但在一般情況下,暴露一切必要措施,落實運營商=()更可能削弱封裝不是讓運營商=()的成員。 – 2011-03-21 16:54:14