Суббота, 14.06.2025, 18:25
Приветствую Вас Гость | RSS
Форма входа
Поиск
Календарь
«  Июнь 2025  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Как написать оператор присваивания

Оператор присваивания должен выглядеть так:

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];
        }
    }
};