Урок 136. Перегрузка операторов сравнения

   | 

   | 

 Обновлено 14 Апр 2018  | 

 1749

 ǀ   3 

Принципы перегрузки операторов сравнения те же, что и в перегрузке других операторов, которые мы рассматривали в предыдущих уроках.

Поскольку все операторы сравнения бинарные и не изменяют свои левые операнды, то выполнять перегрузку следует через дружественные функции.

Например, перегрузим операторы равенства == и != для класса Car:

Всё просто. Поскольку результат выполнения оператора != является прямо противоположным результату выполнения оператора ==, то мы определили оператор != используя уже перегруженный оператор == (уменьшив, таким образом, количество кода, сложность и возможность возникновения ошибок).

А как насчет операторов < и >? Здесь нужно определиться, чем один объект класса Car может быть лучше другого объекта класса Car, и как это всё выразить в коде. Неочевидно! Поэтому здесь мы и не перегружали операторы < и >.

Совет: Не перегружайте операторы, которые будут бессмысленны для вашего класса.

Однако, операторы < и > можно использовать для сортировки списка автомобилей (объектов класса Car) в алфавитном порядке, используя члены m_company и m_model. Поэтому всегда рассматривайте разные варианты.

Некоторые классы-контейнеры (классы, которые содержат группы других классов) стандартной библиотеки C++ требуют перегрузки оператора <, чтобы они могли сохранять отсортированные элементы.

Перегрузим операторы сравнения >, <, >= и <=:

Всё просто.

Но, как вы уже могли бы заметить, операторы > и <= являются логическими противоположностями, поэтому одного из них можно было бы определить через второй. Та же ситуация и с < и >=. Но, поскольку определения функций перегрузки столь просты, а операторы в строчке объявления функции так хорошо сочетаются с операторами в строчке возврата результата, мы решили этого не делать.

Тест

Задание №1

Используя класс Dollars выше, перепишите операторы < и <=, используя их логические противоположности.

Ответ 1

Задание №2

Добавьте перегрузку операторов << и < в класс Car выше, чтобы следующий фрагмент кода:

производил следующий результат:

(Ford, Mustang)
(Ford, Ranger)
(Renault, Duster)
(Renault, Logan)

Ответ 2

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (8 оценок, среднее: 5,00 из 5)
Загрузка...
Подписаться на обновления:

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

  1. Torgu:

    Тоже как вариант для оператора сравнения

  2. Герман:

    Не совсем ясно, как функция sort "подхватывает" оператор < для класса Car.

    1. Юрий Юрий:

      Функция sort является встроенным функционалом заголовочного файла vector, который вы подключаете. Можете детальнее поискать информацию о функции sort в Интернете.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ВОЛШЕБНАЯ ТАБЛЕТКА ПО С++