Страницы

Поиск по вопросам

понедельник, 10 февраля 2020 г.

В чем ошибка при перегрузке оператора+?

#cpp #классы #перегрузка_операторов


Перегружаю бинарный + в своем классе:

MyClass operator+(const MyClass &a, const MyClass &b) {
    ...
    return a.value + b.value;
}


Получаю ошибку бинарный оператор + имеет слишком много параметров. В чем проблема?
Везде указывается именно такая сигнатура перегрузки этого оператора.
    


Ответы

Ответ 1



Каждая не статическая функция-член класса имеет неявный параметр, который получает значение this, то есть указатель на сам объект класса. Вам надо либо этот оператор определить в классе как дружественную функцию (если требуется обращение к закрытым или защищенным членам класса), например friend MyClass operator+(const MyClass &a, const MyClass &b) { ... return a.value + b.value; } Или объявить ее как обычную функцию вне класса, если не требуется обращение к закрытым или защищенным членам класса. Либо сделать оператор функцией-членом класса, но с одним явным параметром MyClass operator+( const MyClass &b) const { ... return this->value + b.value; }

Ответ 2



В классе он должен перегружаться с одним аргументом. Второй аргумент - объект самого класса. Если вы создаете его как свободную функцию (вне класса) - все верно, именно такая сигнатура и должна быть.

Комментариев нет:

Отправить комментарий