Перевантаження оператора C ++ прикладами

Зміст:

Anonim

Що таке перевантаження оператора?

Використовуючи перевантаження оператора в C ++, ви можете вказати більше одного значення для оператора в одній області. Метою перевантаження оператора є надання особливого значення оператора для визначеного користувачем типу даних.

За допомогою перевантаження оператора ви можете перевизначити більшість операторів C ++. Ви також можете використовувати перевантаження оператора для виконання різних операцій за допомогою одного оператора.

У цьому підручнику з C ++ ви дізнаєтесь:

  • Що таке перевантаження оператора?
  • Синтаксис
  • Різні підходи до перевантаження оператора в C ++
  • Чи всі оператори C ++ можуть бути перевантажені?
  • Що слід пам’ятати:
  • Правила перевантаження оператора:
  • Як перевантажити оператора:

Синтаксис

Щоб перевантажити оператор С ++, слід визначити спеціальну функцію всередині Класу наступним чином:

class class_name{… publicreturn_type operator symbol (argument(s)){… }… };

Ось пояснення вищезазначеного синтаксису:

  • Return_type - це тип повернення функції.
  • Далі ви згадуєте ключове слово оператора.
  • Символ позначає символ оператора, який потрібно перевантажити. Наприклад, +, -, <, ++.
  • Аргумент (и) можуть передаватися операторській функції так само, як і функції.

Приклад 1:

#include using namespace std;class TestClass {private:int count;public:TestClass() : count(5) {}void operator --() {count = count - 3;}void Display() {cout << "Count: " << count; }};int main() {TestClass tc;--tc;tc.Display();return 0;}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включення файлу заголовка iostream до нашого коду для використання його функцій.
  2. Включіть простір імен std у нашу програму, щоб використовувати його класи, не викликаючи його.
  3. Створіть клас з іменем TestClass.
  4. Використовуйте модифікатор приватного доступу, який позначає учасника класу як приватно доступний.
  5. Створіть кількість цілочисельних змінних. Ця змінна буде приватно доступною.
  6. Використовуйте модифікатор загального доступу, який позначає учасника класу як приватно доступний.
  7. Використовуйте конструктор класів, щоб ініціалізувати лічильник змінних значенням 5.
  8. Перевантажте значення оператора -.
  9. Оператор зменшить значення змінної x на 1.
  10. Кінець секції перевантаження оператора. Оператор отримав нову назву.
  11. Визначення функції з назвою Display ().
  12. Надрукуйте значення кількості змінних поряд з іншим текстом на консолі при виклику функції Display (). Значок} позначає кінець основного елемента функції Display ().
  13. Кінець класу тіла.
  14. Виклик функції main (). У цій функції слід додати логіку програми.
  15. Створіть екземпляр класу TestClass і дайте йому назву tc.
  16. Це викличе функцію void operator - ().
  17. Використовуйте позицію класу TestClass, щоб викликати функцію Display ().
  18. Функція повинна повертати значення після успішного завершення.
  19. Кінець тіла функції main ().

Різні підходи до перевантаження оператора в C ++

Ви можете виконати перевантаження оператора, реалізувавши будь-який із наступних типів функцій:

  1. Функція члена
  2. Функція, що не є членом
  3. Функція друга
  • Функція перевантаження оператора може бути функцією-членом, коли лівий операнд є об'єктом класу.
  • Коли лівий операнд відрізняється, функція перевантаження оператора повинна бути функцією, що не є членом.

Ви можете зробити функцію перевантаження оператора другою, якщо йому потрібен доступ до приватних та захищених членів класу.

Чи всі оператори C ++ можуть бути перевантажені?

Ні. Є оператори C ++, які неможливо перевантажити.

Вони включають:

  • :: -Оператор роздільної здатності
  • ?: -векторний оператор.
  • . -селектор членів
  • Розмір оператора
  • * -селектор покажчика члена

Що слід пам’ятати:

  1. За допомогою перевантаження оператора ви можете перевизначити спосіб роботи оператора лише для визначених користувачем типів (об’єктів, структур). Ви не можете використовувати його для вбудованих типів (float, char, int тощо).
  2. Оператори = та & C ++ перевантажені за замовчуванням. Наприклад, ви можете скопіювати об'єкти одного класу безпосередньо за допомогою оператора =.
  3. Пріоритет оператора не змінює асоціативно та пріоритет операторів. Однак ви можете змінити порядок оцінки за допомогою дужок.
  4. Є чотири оператори, які ви не можете перевантажити в C ++. Вони включають оператор роздільної здатності (: :), оператор вибору члена (.), Вибір члена за допомогою вказівника на оператор функції (. *) Та трикратний оператор (? :).

Правила перевантаження оператора:

Ось правила перевантаження оператора:

  • Щоб він працював, принаймні один операнд повинен бути визначеним користувачем об'єктом класу.
  • Ви можете перевантажити лише існуючі оператори. Ви не можете перевантажити нових операторів.
  • Деякі оператори не можуть бути перевантажені за допомогою функції друга. Однак такі оператори можуть бути перевантажені за допомогою функції-члена.

Як перевантажити оператора:

Приклад 1:

#include using namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включення файлу заголовка iostream до нашого коду для використання його функцій.
  2. Включіть простір імен std у нашу програму, щоб використовувати його класи, не викликаючи його.
  3. Створіть клас з ім'ям OperatorOverload.
  4. Використовуйте модифікатор приватного доступу, який позначає учасника класу як приватно доступний.
  5. Створіть цілу змінну x. Ця змінна буде приватно доступною.
  6. Використовуйте модифікатор загального доступу, який позначає учасника класу як приватно доступний.
  7. Використовуйте конструктор класів для ініціалізації змінної x до 10.
  8. Перевантажте значення оператора ++.
  9. Оператор збільшить значення змінної x з 2.
  10. Кінець секції перевантаження оператора. Оператор отримав нову назву.
  11. Виклик функції Print ().
  12. Надрукуйте значення змінної x поряд з іншим текстом на консолі при виклику функції Print ().
  13. Кінець основного елемента функції Print ().
  14. Кінець класу тіла.
  15. Виклик функції main (). У цій функції слід додати логіку програми.
  16. Створіть екземпляр класу OperatorOverload з ім'ям ov.
  17. Це викличе функцію void ++ ().
  18. Використовуйте позицію класу OperatorOverload для виклику функції Print ().
  19. Функція повинна повертати значення після успішного завершення.
  20. Кінець тіла функції main ().

Приклад 2:

#includeusing namespace std;class TestClass {private:int real, over;public:TestClass(int rl = 0, int ov = 0) {real = rl;over = ov;}TestClass operator + (TestClass const &obj) {TestClass result;result.real = real + obj.real;result.over = over + obj.over;return result;}void print() {cout << real << " + i" << over << endl;}};int main(){TestClass c1(9, 5), c2(4, 3);TestClass c3 = c1 + c2;c3.print();}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включення файлу заголовка iostream до нашої програми для використання його функцій.
  2. Включіть простір імен std у нашу програму, щоб використовувати її класи, не викликаючи його.
  3. Створіть клас з іменем TestClass. Значок {позначає початок тіла класу.
  4. Використовуйте модифікатор приватного доступу, щоб позначити змінні як приватні, тобто доступ до них доступний лише з класу.
  5. Визначте дві цілочисельні змінні, реальну та більше.
  6. Використовуйте модифікатор загального доступу, щоб позначити конструктор як загальнодоступний, що означає, що він буде доступний навіть поза Класом.
  7. Створення конструктора класу та ініціалізація змінних.
  8. Ініціалізуйте значення змінної real.
  9. Ініціалізуйте значення змінної над.
  10. Кінець тіла конструктора.
  11. Замінити значення оператора +.
  12. Створіть результат типу даних типу TestClass.
  13. Використовуйте оператор + із комплексними числами. Цей рядок додасть дійсну частину числа до реальної частини іншого числа.
  14. Використовуйте оператор + із комплексними числами. Цей рядок додасть уявну частину числа до уявної частини іншого числа.
  15. Після успішного виконання програма поверне значення змінної результату.
  16. Кінець визначення нового значення оператора +, тобто перевантаження.
  17. Викличте метод print ().
  18. Надрукуйте новий комплексний номер після додавання на консолі.
  19. Кінець функції основного тексту print ().
  20. Кінець основного класу TestClass.
  21. Виклик функції main ().
  22. Передача значень як дійсних, так і складних частин, які слід додати. Перша частина c1 буде додана до першої частини c2, тобто 9 + 4. Друга частина c1 буде додана до другої частини c, тобто 5 + 3.
  23. Виконання операції з використанням оператора перевантаженого + та збереження результату у змінній c3.
  24. Друк значення змінної c3 на консолі.
  25. Кінець тіла основної () функції.

Короткий зміст:

  • Ви можете вказати більше одного значення для оператора С ++ в одній області дії.
  • Це називається перевантаженням оператора.
  • Перевантаження оператора надає особливе значення оператора для користувацького типу даних.
  • Ви можете перевизначити більшість операторів C ++ через перевантаження оператора.
  • Не всі оператори C ++ можуть бути перевантажені.
  • Щоб оператор був перевантажений, принаймні один з операндів повинен бути визначеним користувачем об'єктом.
  • Перевантажувати можна лише існуючі оператори. Ви не можете перевантажувати нових операторів.