Що таке перевантаження оператора?
Використовуючи перевантаження оператора в C ++, ви можете вказати більше одного значення для оператора в одній області. Метою перевантаження оператора є надання особливого значення оператора для визначеного користувачем типу даних.
За допомогою перевантаження оператора ви можете перевизначити більшість операторів C ++. Ви також можете використовувати перевантаження оператора для виконання різних операцій за допомогою одного оператора.
У цьому підручнику з C ++ ви дізнаєтесь:
- Що таке перевантаження оператора?
- Синтаксис
- Різні підходи до перевантаження оператора в C ++
- Чи всі оператори C ++ можуть бути перевантажені?
- Що слід пам’ятати:
- Правила перевантаження оператора:
- Як перевантажити оператора:
Синтаксис
Щоб перевантажити оператор С ++, слід визначити спеціальну функцію всередині Класу наступним чином:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Ось пояснення вищезазначеного синтаксису:
- Return_type - це тип повернення функції.
- Далі ви згадуєте ключове слово оператора.
- Символ позначає символ оператора, який потрібно перевантажити. Наприклад, +, -, <, ++.
- Аргумент (и) можуть передаватися операторській функції так само, як і функції.
Приклад 1:
#includeusing 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.
- Використовуйте модифікатор приватного доступу, який позначає учасника класу як приватно доступний.
- Створіть кількість цілочисельних змінних. Ця змінна буде приватно доступною.
- Використовуйте модифікатор загального доступу, який позначає учасника класу як приватно доступний.
- Використовуйте конструктор класів, щоб ініціалізувати лічильник змінних значенням 5.
- Перевантажте значення оператора -.
- Оператор зменшить значення змінної x на 1.
- Кінець секції перевантаження оператора. Оператор отримав нову назву.
- Визначення функції з назвою Display ().
- Надрукуйте значення кількості змінних поряд з іншим текстом на консолі при виклику функції Display (). Значок} позначає кінець основного елемента функції Display ().
- Кінець класу тіла.
- Виклик функції main (). У цій функції слід додати логіку програми.
- Створіть екземпляр класу TestClass і дайте йому назву tc.
- Це викличе функцію void operator - ().
- Використовуйте позицію класу TestClass, щоб викликати функцію Display ().
- Функція повинна повертати значення після успішного завершення.
- Кінець тіла функції main ().
Різні підходи до перевантаження оператора в C ++
Ви можете виконати перевантаження оператора, реалізувавши будь-який із наступних типів функцій:
- Функція члена
- Функція, що не є членом
- Функція друга
- Функція перевантаження оператора може бути функцією-членом, коли лівий операнд є об'єктом класу.
- Коли лівий операнд відрізняється, функція перевантаження оператора повинна бути функцією, що не є членом.
Ви можете зробити функцію перевантаження оператора другою, якщо йому потрібен доступ до приватних та захищених членів класу.
Чи всі оператори C ++ можуть бути перевантажені?
Ні. Є оператори C ++, які неможливо перевантажити.
Вони включають:
- :: -Оператор роздільної здатності
- ?: -векторний оператор.
- . -селектор членів
- Розмір оператора
- * -селектор покажчика члена
Що слід пам’ятати:
- За допомогою перевантаження оператора ви можете перевизначити спосіб роботи оператора лише для визначених користувачем типів (об’єктів, структур). Ви не можете використовувати його для вбудованих типів (float, char, int тощо).
- Оператори = та & C ++ перевантажені за замовчуванням. Наприклад, ви можете скопіювати об'єкти одного класу безпосередньо за допомогою оператора =.
- Пріоритет оператора не змінює асоціативно та пріоритет операторів. Однак ви можете змінити порядок оцінки за допомогою дужок.
- Є чотири оператори, які ви не можете перевантажити в C ++. Вони включають оператор роздільної здатності (: :), оператор вибору члена (.), Вибір члена за допомогою вказівника на оператор функції (. *) Та трикратний оператор (? :).
Правила перевантаження оператора:
Ось правила перевантаження оператора:
- Щоб він працював, принаймні один операнд повинен бути визначеним користувачем об'єктом класу.
- Ви можете перевантажити лише існуючі оператори. Ви не можете перевантажити нових операторів.
- Деякі оператори не можуть бути перевантажені за допомогою функції друга. Однак такі оператори можуть бути перевантажені за допомогою функції-члена.
Як перевантажити оператора:
Приклад 1:
#includeusing 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 ++ ().
- Використовуйте позицію класу OperatorOverload для виклику функції Print ().
- Функція повинна повертати значення після успішного завершення.
- Кінець тіла функції 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();}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включення файлу заголовка iostream до нашої програми для використання його функцій.
- Включіть простір імен std у нашу програму, щоб використовувати її класи, не викликаючи його.
- Створіть клас з іменем TestClass. Значок {позначає початок тіла класу.
- Використовуйте модифікатор приватного доступу, щоб позначити змінні як приватні, тобто доступ до них доступний лише з класу.
- Визначте дві цілочисельні змінні, реальну та більше.
- Використовуйте модифікатор загального доступу, щоб позначити конструктор як загальнодоступний, що означає, що він буде доступний навіть поза Класом.
- Створення конструктора класу та ініціалізація змінних.
- Ініціалізуйте значення змінної real.
- Ініціалізуйте значення змінної над.
- Кінець тіла конструктора.
- Замінити значення оператора +.
- Створіть результат типу даних типу TestClass.
- Використовуйте оператор + із комплексними числами. Цей рядок додасть дійсну частину числа до реальної частини іншого числа.
- Використовуйте оператор + із комплексними числами. Цей рядок додасть уявну частину числа до уявної частини іншого числа.
- Після успішного виконання програма поверне значення змінної результату.
- Кінець визначення нового значення оператора +, тобто перевантаження.
- Викличте метод print ().
- Надрукуйте новий комплексний номер після додавання на консолі.
- Кінець функції основного тексту print ().
- Кінець основного класу TestClass.
- Виклик функції main ().
- Передача значень як дійсних, так і складних частин, які слід додати. Перша частина c1 буде додана до першої частини c2, тобто 9 + 4. Друга частина c1 буде додана до другої частини c, тобто 5 + 3.
- Виконання операції з використанням оператора перевантаженого + та збереження результату у змінній c3.
- Друк значення змінної c3 на консолі.
- Кінець тіла основної () функції.
Короткий зміст:
- Ви можете вказати більше одного значення для оператора С ++ в одній області дії.
- Це називається перевантаженням оператора.
- Перевантаження оператора надає особливе значення оператора для користувацького типу даних.
- Ви можете перевизначити більшість операторів C ++ через перевантаження оператора.
- Не всі оператори C ++ можуть бути перевантажені.
- Щоб оператор був перевантажений, принаймні один з операндів повинен бути визначеним користувачем об'єктом.
- Перевантажувати можна лише існуючі оператори. Ви не можете перевантажувати нових операторів.