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

347
26 ноября 2016, 19:32

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

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

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

Answer 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;
}
Answer 2

В классе он должен перегружаться с одним аргументом. Второй аргумент - объект самого класса.

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

READ ALSO
Умножение двух двоичных чисел с++

Умножение двух двоичных чисел с++

Не могли бы вы мне подсказать как написать код для умножения двух двоичных чисел? Нужно именно их умножить, поэтому через перевод в 10 сс не получится

322
Перегрузка оператора [][] в C++

Перегрузка оператора [][] в C++

У меня есть класс "Матрица"И в нём нужно перегрузить оператор [] так, дабы при обращении [][] к элементам имело смысл, аналогично встроенному

200
java, Intellij IDEA и remote development

java, Intellij IDEA и remote development

Каким образом настроить компиляцию на удаленной машине java-приложения ? В netbeans все достаточно просто и работает безотказно, а вот в intellij idea никак...

251
Как из SQLite Бд вывести элемент в TextView

Как из SQLite Бд вывести элемент в TextView

В общем у меня есть listView в главном активити:

339