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;
}

вихід:

Operator Перевантаження

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

Operator Перевантаження

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

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

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

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

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

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

Можна все C++ Operaбути перевантаженими?

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

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

  • :: -Оператор дозволу області видимості
  • ?: -тернарний оператор.
  • . - селектор членів
  • Оператор sizeof
  • * - селектор вказівника на член

Що потрібно пам'ятати

  1. За допомогою перевантаження оператора ви можете перевизначати спосіб роботи оператора лише для типів, визначених користувачем (об’єктів, структур). Ви не можете використовувати його для вбудованих типів (float, char, int тощо).
  2. = і & C++ оператори перевантажені за замовчуванням. Наприклад, ви можете скопіювати об’єкти одного класу безпосередньо за допомогою оператора =.
  3. Operaпріоритет tor не змінює асоціативності та пріоритету операторів. Однак ви можете змінити порядок оцінювання за допомогою круглих дужок.
  4. Є чотири оператори, які не можна перевантажувати 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;
}

вихід:

Перевантаження Operaтор Приклад

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

Перевантаження Operaтор Приклад

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

  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. Використовуйте позицію Operaклас torOverload для виклику функції Print().
  19. Функція повинна повертати значення після успішного завершення.
  20. Кінець тіла функції 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();
}

вихід:

Перевантаження Operaтор Приклад

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

Перевантаження Operaтор Приклад

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

  1. Включення файлу заголовка iostream до нашої програми, щоб використовувати його функції.
  2. Включіть простір імен std у нашу програму, щоб використовувати його класи без його виклику.
  3. Створіть клас під назвою TestClass. { позначає початок тіла класу.
  4. Використовуйте модифікатор приватного доступу, щоб позначити змінні як приватні, тобто до них можна отримати доступ лише з класу.
  5. Визначте дві цілі змінні, дійсну та над.
  6. Використовуйте модифікатор публічного доступу, щоб позначити конструктор як публічний, тобто він буде доступний навіть за межами класу.
  7. Створення конструктора класу та ініціалізація змінні.
  8. Ініціалізація значення змінної real.
  9. Ініціалізація значення змінної over.
  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. Кінець тіла функції main().

Підсумки

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