Оператор присваивания может быть перегружен с использованием функции-члена, но не является функцией не-члена friend:
class Test
{
int a;
public:
Test(int x)
:a(x)
{}
friend Test& operator=(Test &obj1, Test &obj2);
};
Test& operator=(Test &obj1, Test &obj2)//Not implemented fully. just for test.
{
return obj1;
}
Он вызывает эту ошибку:
ошибка C2801: 'operator =' должен быть нестационарным членом
Почему не может использоваться функция friend для перегрузки оператора присваивания? Компилятор позволяет перегрузить другие операторы, такие как += и -=, используя friend. Какая внутренняя проблема/ограничение в поддержке operator=?