C++ Operator Перевантаження прикладами
Що таке Operator Перевантаження?
використання перевантаження оператора in C++, ви можете вказати більше ніж одне значення для оператора в одній області. Метою перевантаження оператора є надання спеціального значення оператора для визначеного користувачем типу даних.
За допомогою перевантаження операторів можна перевизначити більшість C++ оператори. Ви також можете використовувати перевантаження операторів для виконання різних операцій за допомогою одного оператора.
синтаксис
Перевантажувати a C++ оператора, ви повинні визначити спеціальну функцію всередині класу наступним чином:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Ось пояснення наведеного вище синтаксису:
- return_type — це тип повернення для функції.
- Далі ви згадуєте ключове слово operator.
- Символ позначає символ оператора, який буде перевантажено. Наприклад, +, -, <, ++.
- Аргумент(и) можна передати операторній функції так само, як і функції.
Приклад 1
#include <iostream> 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; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включення файлу заголовка iostream у наш код для використання його функцій.
- Включіть простір імен std у нашу програму, щоб використовувати його класи без його виклику.
- Створіть клас під назвою TestClass.
- Використовуйте модифікатор приватного доступу, який позначає член класу як приватно доступний.
- Створіть цілочисельну змінну count. Ця змінна буде приватно доступною.
- Використовуйте модифікатор публічного доступу, який позначає член класу як приватно доступний.
- Використовуйте конструктор класу, щоб ініціалізувати змінну counter до 5.
- Перевантажте значення оператора —.
- Оператор зменшить значення змінної x на 1.
- Кінець розділу перевантаження операторів. Оператор отримав нову назву.
- Визначення функції під назвою Display().
- Вивести значення кількості змінних поряд з іншим текстом на консолі під час виклику функції Display(). } позначає кінець тіла функції Display().
- Кінець тіла класу.
- Виклик функції main(). Логіку програми слід додати в цю функцію.
- Створіть екземпляр класу TestClass і назвіть його tc.
- Це викличе функцію оператора void –().
- Використовуйте позицію класу TestClass для виклику функції Display().
- Функція повинна повертати значення після успішного завершення.
- Кінець тіла функції main().
Різні підходи до Operator Перевантаження в C++
Ви можете виконати перевантаження оператора, реалізувавши будь-який із таких типів функцій:
- Функція члена
- Функція не член
- Функція друга
- Функція перевантаження оператора може бути функцією-членом, коли лівий операнд є об’єктом класу.
- Коли лівий операнд відрізняється, Operaфункція перевантаження tor має бути нечленом.
Ви можете зробити функцію перевантаження оператора функцією друга, якщо їй потрібен доступ до приватних і захищених членів класу.
Можна все C++ Operaбути перевантаженими?
Ні, є C++ оператори, які не можна перевантажувати.
Вони включають в себе:
- :: -Оператор дозволу області видимості
- ?: -тернарний оператор.
- . - селектор членів
- Оператор sizeof
- * - селектор вказівника на член
Що потрібно пам'ятати
- За допомогою перевантаження оператора ви можете перевизначати спосіб роботи оператора лише для типів, визначених користувачем (об’єктів, структур). Ви не можете використовувати його для вбудованих типів (float, char, int тощо).
- = і & C++ оператори перевантажені за замовчуванням. Наприклад, ви можете скопіювати об’єкти одного класу безпосередньо за допомогою оператора =.
- Operaпріоритет tor не змінює асоціативності та пріоритету операторів. Однак ви можете змінити порядок оцінювання за допомогою круглих дужок.
- Є чотири оператори, які не можна перевантажувати C++. Вони включають оператор розділення області (::), оператор вибору члена (.), вибір елемента через вказівник на оператор функції (.*) і тернарний оператор (?:).
Правила для Operator Перевантаження
Ось правила для Operator Перевантаження:
- Щоб він працював, принаймні один операнд має бути визначеним користувачем об’єктом класу.
- Можна лише перевантажувати існуючі оператори. Ви не можете перевантажувати нові оператори.
- Деякі оператори не можна перевантажувати за допомогою функції друга. Однак такі оператори можуть бути перевантажені за допомогою функції-члена.
Як перевантажити Operaтор
Приклад 1
#include <iostream> 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; }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включення файлу заголовка iostream у наш код для використання його функцій.
- Включіть простір імен std у нашу програму, щоб використовувати його класи без його виклику.
- Створіть клас під назвою OperatorOverload.
- Використовуйте модифікатор приватного доступу, який позначає член класу як приватно доступний.
- Створіть цілу змінну x. Ця змінна буде приватно доступною.
- Використовуйте модифікатор публічного доступу, який позначає член класу як приватно доступний.
- Використовуйте конструктор класу, щоб ініціалізувати змінну x до 10.
- Перевантажте значення оператора ++.
- Оператор збільшить значення змінної x на 2.
- Кінець розділу перевантаження операторів. Оператор отримав нову назву.
- Виклик функції Print().
- Вивести значення змінної x разом із іншим текстом на консолі під час виклику функції Print().
- Кінець тіла функції Print().
- Кінець тіла класу.
- Виклик функції main(). Логіку програми слід додати в цю функцію.
- Створіть екземпляр OperatorOverload Клас під назвою ov.
- Це викличе функцію оператора void ++().
- Використовуйте позицію Operaклас torOverload для виклику функції Print().
- Функція повинна повертати значення після успішного завершення.
- Кінець тіла функції main().
Приклад 2
#include<iostream> using 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(); }
вихід:
Ось скріншот коду:
Пояснення коду:
- Включення файлу заголовка iostream до нашої програми, щоб використовувати його функції.
- Включіть простір імен std у нашу програму, щоб використовувати його класи без його виклику.
- Створіть клас під назвою TestClass. { позначає початок тіла класу.
- Використовуйте модифікатор приватного доступу, щоб позначити змінні як приватні, тобто до них можна отримати доступ лише з класу.
- Визначте дві цілі змінні, дійсну та над.
- Використовуйте модифікатор публічного доступу, щоб позначити конструктор як публічний, тобто він буде доступний навіть за межами класу.
- Створення конструктора класу та ініціалізація змінні.
- Ініціалізація значення змінної real.
- Ініціалізація значення змінної over.
- Кінець корпусу конструктора.
- Перевизначте значення оператора +.
- Створіть результат типу даних TestClass.
- Використовуйте оператор + із комплексними числами. Цей рядок додасть дійсну частину числа до дійсної частини іншого числа.
- Використовуйте оператор + із комплексними числами. Цей рядок додасть уявну частину числа до уявної частини іншого числа.
- Програма поверне значення змінної результат після успішного виконання.
- Кінець визначення нового значення оператора +, тобто перевантаження.
- Викличте метод print().
- Виведіть нове комплексне число після додавання на консолі.
- Кінець тіла функції print().
- Кінець тіла класу TestClass.
- Виклик функції main().
- Передача значень як дійсних, так і комплексних частин, які потрібно додати. Перша частина c1 буде додана до першої частини c2, тобто 9+4. Друга частина c1 буде додана до другої частини c, тобто 5+3.
- Виконання операції з використанням перевантаженого оператора + і збереження результату в змінній c3.
- Друк значення змінної c3 на консолі.
- Кінець тіла функції main().
Підсумки
- Ви можете вказати більше одного значення для a C++ оператор в одному обсязі.
- Це називається перевантаженням оператора.
- Operator overloading надає спеціальне значення оператора для визначеного користувачем типу даних.
- Ви можете перевизначити більшість C++ через перевантаження операторів.
- Не всі C++ оператори можуть бути перевантажені.
- Щоб оператор був перевантажений, принаймні один із операндів має бути об’єктом, визначеним користувачем.
- Перевантажувати можна лише існуючі оператори. Не можна перевантажувати нові оператори.