В соответствии с ответами на этот поток operator=
не может быть перегружен как функция, не являющаяся членом. Так, например, следующее делает компилятор очень сердитым:
class MyClass
{
// ...
};
MyClass& operator=(MyClass& Left, MyClass& Right)
{
// ...
}
Почему это? У меня есть контейнерный класс с геттерами и сеттерами, поэтому функция-член не нужна, и она разрушит инкапсуляцию. Один из ответов на вышеупомянутый поток сказал, что он должен удостовериться, что "значение L принимается как его первый операнд", но я не совсем понимаю, что это значит. Может кто-нибудь прояснить?
Кроме того, существуют случаи operator=
, operator()
, operator[]
и operator->
"oddball"...? Или я должен реализовать все перегруженные операторы как функции-члены...? (Я знаю, что законно делать иначе, но я ищу лучшую практику.)