#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
В классе он должен перегружаться с одним аргументом. Второй аргумент - объект самого класса. Если вы создаете его как свободную функцию (вне класса) - все верно, именно такая сигнатура и должна быть.
Комментариев нет:
Отправить комментарий