Перевантаження унарного оператора
При перевантаженні унарної операції функція 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) // перевірка на вихід за межі масиву