このスレッドへの返信によるとoperator=
、非メンバー関数としてオーバーロードすることはできません。したがって、たとえば、次の場合、コンパイラは非常に怒っています。
class MyClass
{
// ...
};
MyClass& operator=(MyClass& Left, MyClass& Right)
{
// ...
}
どうしてこれなの?ゲッターとセッターを含むコンテナー クラスがあるため、メンバー関数は不要であり、カプセル化が壊れます。前述のスレッドへの回答の1つは、「L値が最初のオペランドとして受け取られる」ことを確認することであると述べましたが、それが何を意味するのか完全にはわかりません。誰か明確にしてくれませんか?
さらに、operator=
、operator()
、operator[]
およびoperator->
「オッドボール」ケースはありますか? それとも、オーバーロードされたすべての演算子をメンバー関数として実装する必要がありますか? (そうでなければ完全に合法であることは知っていますが、より良い方法を探しています。)