Урок №144. Перевантаження операторів порівняння

  Юрій  | 

  Оновл. 25 Вер 2021  | 

 160

Принципи перевантаження операторів порівняння ті ж самі, що і в перевантаженні інших операторів, які ми розглядали на попередніх уроках. Оскільки всі оператори порівняння є бінарними і не змінюють свої ліві операнди, то виконувати перевантаження потрібно через дружні функції.

Наприклад, перевантажимо оператор рівності == і оператор нерівності != для класу 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 Зірок (3 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *