Supraоnc; оператори зарядки
Перевантаження оператора дозволяє використовувати оператори стандартної мови для власних класів. Це можна зробити, визначивши функції зі спеціальною назвою (за допомогою оператора ключового слова).

Існують деякі обмеження щодо перевантаження операторів:
- основні характеристики операторів не можуть бути змінені (пріоритет, напрямок оцінки, асоціативність, потужність)
- не можна вводити нових операторів порівняно з існуючими в мові
- оператори для базових типів не можуть бути перевантажені
- оператори не можуть бути перевантажені. . *:? та розмір
Оператори можуть бути перевантажені функціями-членами в класі або звичайними функціями. Якщо використовуються функції-члени, кількість параметрів функції на 1 менше, ніж потужність оператора (перший операнд вважається покажчиком цього ).
Детальніше див. У книзі "Об'єктно-орієнтоване програмування на C ++", сторінки 52-78.
Створіть клас колекції зберігається у вигляді простого ланцюгового списку для зберігання цілих чисел, що дозволяє виконувати основні операції за допомогою операторів та дозволяти обертати колекцію за допомогою ітератора. Напишіть основну програму, щоб продемонструвати функціонування класу.
Для її вирішення нам знадобляться три класи:
- основний клас називався Колекція який містить виконання операцій
- приватний клас Нод (включено до класу Колекція), що містить дані для вузла у списку
- Клас ітератора (включено до класу Колекція), що дозволяє перераховувати елементи колекції
Реалізація класів на C ++ та основна програма тестування:
* Реалізує набір цілих чисел у вигляді списку
struct Node; // Оголошення класу вузлів (для Iterator)
Collection (): head (NULL) <> // конструктор за замовчуванням
Колекція (const Collection & c) // конструктор копіювання
// пройти колекцію за допомогою ітератора
для (Ітератор i = c.Start (); i! = c.End (); i ++)
// і ми додаємо вузли в нашій колекції
const Collection & operator = (const Collection & c)
для (Ітератор i = c.Start (); i! = c.End (); i ++)
// оператор прямого доступу до елементів
int & operator [] (int k) const
// ми припускаємо, що індекс знаходиться всередині колекції
void Додати (значення int) // додати елемент в кінці
// випадок 2: список не порожній
const Collection & operator + = (значення int)
void Insert (int poz, int val) // вставити елемент
// випадок 1: вставка на початку збору
// випадок 2: вставка всередині колекції
// ми шукаємо позицію вставки
p-> Next = новий Вузол (val, p-> Next);
void Видалити (int pos) // видалити елемент із зазначеної позиції
// випадок 1: видалення на початку збору
// випадок 2: видалення з колекції
void EmptyCollection () // видалення всіх елементів у колекції
const Collection & operator + = (const Collection & c)
для (Ітератор i = c.Start (); i! = c.End (); i ++)
оператор const Collection + (const Collection & c)
для (Ітератор i = c.Start (); i! = c.End (); i ++)
int ElementNumber () const // отримуємо кількість елементів