Оператор присваивания должен выглядеть так:
A& operator= (const A &a);
{
if (*this == a)
return *this;
// действия по присваиванию
return *this;
}
Почему аргумент должен быть константным? Чтобы иметь возможность написать следующую конструкцию:
сonst A a;
A b;
b = a;
Возвращаемое значение должно быть ссылкой на тип A, чтобы иметь возможность написать такую конструкцию:
A a, b, c;
a = b = c;
При реализации оператора присваивания в самом его начале, нужно производить проверку на присваивание объекта самому себе (для этого должен быть определён оператор равенства operator==):
if (*this == a)
return *this;
Если производится попытка присваивания самому себе, то возможно потеря информации. Например:
class A
{
int *pv;
public:
A& operator= (const A &a)
{
delete pv; // при этом удаляется информация
pv = new int [5];
for (int i = 0; i < 5 ; ++i)
{
pv[i] = a.pv[i];
}
}
};