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++ оператори можуть бути перевантажені.
- Щоб оператор був перевантажений, принаймні один із операндів має бути об’єктом, визначеним користувачем.
- Перевантажувати можна лише існуючі оператори. Не можна перевантажувати нові оператори.



