Урок №143. Перевантаження унарних операторів +, – і логічного НЕ

  Юрій  | 

  Оновл. 17 Лют 2021  | 

 48

Розглянемо унарні оператори плюс (+), мінус (-) і логічне НЕ (!), які працюють з одним операндом. Так як вони застосовуються тільки до одного об’єкту, то їх перевантаження слід виконувати через методи класу.

Наприклад, перевантажимо унарний оператор мінус (-) для класу Dollars:

Примітка: Визначення методу можна записати і всередині класу. Тут ми визначили його поза тілом класу для кращої наочності прикладу.

Все досить-таки просто. Перевантаження від’ємного унарного оператора мінус (-) здійснюється через метод класу, так як явні параметри в функції перевантаження відсутні (тільки неявний об’єкт, на який вказує прихований вказівник *this). Оператор - повертає об’єкт Dollars з від’ємним значенням m_dollars. Оскільки цей оператор не змінює об’єкт класу Dollars, то ми можемо (і повинні) зробити функцію перевантаження константною (щоб мати можливість використовувати цей оператор і з константними об’єктами класу Dollars).

Зверніть увагу, плутанини між від’ємним унарним оператором мінус (-) і бінарним оператором мінус (-) немає, так як вони мають різну кількість параметрів.

Ось ще один приклад: оператор ! є логічним оператором НЕ, який повертає true, якщо результатом виразу є false і повертає false, якщо результатом виразу є true. Зазвичай це застосовується до змінних типу bool, щоб перевірити, чи є вони true чи ні:

У мові С++ значення 0 означає false, а будь-яке інше ненульове значення означає true, тому, якщо логічний оператор ! застосовувати до цілочисельних значень, він повертатиме true, якщо значенням змінної є 0, в протилежному випадку — false.

Отже, при роботі з класами, оператор ! повертатиме true, якщо значенням об’єкта класу є false, 0 або будь-яке інше значення, задане як дефолтне (за замовчуванням) при ініціалізації, в протилежному випадку — оператор ! повертатиме false.

У наступному прикладі ми розглянемо перевантаження унарного оператора мінус () і оператора логічного НЕ (!) для класу Something:

Тут перевантажений оператор НЕ (!) повертає true, якщо в Something використовуються значення за замовчуванням (0.0, 0.0, 0.0).

Результат виконання програми:

Something is null.

Якщо ж задати будь-які ненульові значення для об’єкта класу Something:

То результатом буде:

Something is not null.

Тест

Реалізуйте перевантаження унарного оператора плюс (+) для класу Something.

Відповідь

Є два рішення.

Рішення №1:

Рішення №2:

Це працює, тому що Something, який ми повертаємо, є поточним об’єктом.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

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

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