класс — C ++: перегружен! = когда == перегружен

Скажем, у меня есть класс, где я перегружен оператор == в качестве таких:

Class A {
...
public:
bool operator== (const A &rhs) const;
...
};

...

bool A::operator== (const A &rhs) const {
..
return isEqual;
}

У меня уже есть оператор == вернуть правильное логическое значение. Теперь я хочу расширить это до простой противоположности (!=). Я хотел бы назвать перегруженным == оператор и вернуть противоположное, то есть нечто от природы

bool A::operator!= (const A &rhs) const {
return !( this == A );
}

Это возможно? я знаю this не будет работать, но это иллюстрирует то, что я хотел бы иметь. Я хотел бы сохранить только один параметр для вызова: rhs, Буду признателен за любую помощь, потому что я не мог найти ответ после нескольких попыток поиска.

3

Решение

У вас почти было это:

bool A::operator!= (const A &rhs) const {
return !( *this == rhs );
}

Обратите внимание, что this это указатель, не объект. Вы должны разыменовать это. С другой стороны, обычно лучше реализовать большинство бинарных операторов в виде свободных функций, а не функций-членов.

9

Другие решения

Вам не нужно делать это индивидуально (для каждого класса).

Стандартная библиотека уже обеспечивает поддержку этого подхода, объявляя реализации шаблонов по умолчанию для операторов !=, >, <= а также >=, которые полагаются на предоставленные пользователем операторы == а также <, Эти объявления расположены в заголовке <utility> и заключено в пространство имен std::rel_ops,

Поскольку эти реализации объявлены в пространстве имен std::rel_opsПо умолчанию они не найдены. Если вы хотите «активировать» эти определения в вашей программе, сделайте

#include <utility>
using namespace std::rel_ops;

Это, например, автоматически выведет оператор != от вашей реализации оператора == для всех классов в переводческой единице. Вы все еще можете переопределить механизм, предоставив явную реализацию оператора != для какого-то конкретного класса.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector