Еднократно претоварване на оператора

При претоварване на единична операция функцията на оператора няма параметри. Както в предишния случай, обектът, който се модифицира, имплицитно се предава на операторската функция, използвайки този указател.

Унарният оператор, подобно на двоичния, може да бъде претоварен по два начина:

- като функционален компонент без аргументи;

- като глобална функция с един аргумент.

Както знаете, унарният оператор може да бъде префикс и постфикс. За всеки префикс единен оператор изразът може да бъде представен по първия начин като a.operator # (), а за втория като #operator (a).

При претоварване на унарния оператор, използван в постфикс форма, израз като # може да бъде представен по първия начин като a.operator # (int) или как оператор # (a, int) с втория метод. В същото време аргумент от тип int не съществува и се използва за разграничаване на префикс и постфикс форми при претоварване.

По-долу е даден пример за програма за претоварване на оператора ++ и изпълнение на множество задания. За да се претовари унарният оператор ++, предшестващ оператора ++ i, се извиква функцията оператор ++ (). Ако операторът ++ следва операнда i ++, тогава се извиква функцията

оператор ++ (int x), където x е 0.

Клас dek_koord

dek_koord (int X, int Y): x (X), y (Y) <>

void dek_koord: operator ++ () // претоварване на оператора ++ A

void dek_koord: operator ++ (int) // операция за претоварване A++

dek_koord dek_koord: оператор = (dek_koord a)

Клас dek_koord

dek_koord (int X, int Y): x (X), y (Y) <>

приятел dek_koord оператор * (int, dek_koord);

приятел dek_koord оператор * (dek_koord, int);

dek_koord оператор * (int k, dek_koord dk) // претоварване на операцията int * A

dek_koord оператор * (dek_koord dk, int k) // операция за претоварване A * int

dek_koord dek_koord: оператор = (dek_koord dk)

низ (const низ &); // конструктор за копиране

приятелски низ оператор + (низ, const низ);

string: string (const string & a) // описание на конструктора за копиране

низ оператор + (низ s1, const низ s2) // операция претоварване +

за (int i = 0; ss.str [i] = s1.str [i]; i ++); // презаписване на символ '\ 0'

ss.str [i] = ''; // изтриване на \ \ 0

за (int j = 0; ss.str [i + 1] = s2.str [j]; i ++, j ++); // добавяме втория ред

string & string: operator = (const string & st) // претоварване на операцията =

str = new char [size = st.size]; // разпределяме памет за нов ред

cout 2) // проверяваме за масив извън границите