Перевантаження унарного оператора

При перевантаженні унарної операції функція operator не має параметрів. Як і в попередньому випадку, об'єкт, що модифікується, передається в функцію-оператор неявним чином, використовуючи вказівник цього.

Унарний оператор, як і бінарний, може бути перевантажений двома способами:

- як компонент-функція без аргументів;

як глобальна функція з одним аргументом.

Як відомо, унарний оператор може бути префіксним та постфіксним. Для будь-якого префіксного унарного оператора вираз#a може бути представлений при першому способі якa.operator#(), а при другому як#operator(a).

При перевантаженні унарного оператора, що використовується в постфіксній формі, вираз видуa# може бути представлений при першому способі якa.operator#(int) або якoperator#(a,int ) при другому способі. При цьому аргумент типу int не існує і використовується для відмінності префіксної та постфіксної форм при перевантаженні.

Нижче наведено приклад програми навантаження оператора ++ та реалізації множинного присвоєння. Для навантаження унарного оператора ++, попереднього оператору ++i, викликається функція operator ++(). Якщо оператор ++ слідує за операндом i++, то викликається функція

operator++(int x), де приймає значення 0.

Class 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::operator =(dek_koord a)

Class dek_koord

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

friend dek_koord operator*(int,dek_koord);

friend dek_koord operator*(dek_koord,int);

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

dek_koord operator*(dek_koord dk,int k) // Перевантаження операції A*int

dek_koord dek_koord::operator=(dek_koord dk)

string(const string &); // Конструктор копіювання

friend string operator+(string, const string);

string::string(const string &a) // опис конструктора копіювання

string operator+(string s1, const string s2) // Перевантаження операції +

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

ss.str[i]=' '; // Видалення '\0'

for(int j=0; ss.str[i+1]=s2.str[j]; i++,j++); // Дозапис другого рядка

string &string:operator =(const string &stst) // перевантаження операції =

str=new char[size=st.size]; // виділяємо пам'ять під новий рядок

cout 2) // перевірка на вихід за межі масиву