Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
POO - Curs Doc-1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
868.86 Кб
Скачать

§16. Supraîncărcarea unor operatori speciali

Pe lângă operatori tradiţionali, cum ar fi, de exemplu, +, -, *, / pot fi supraîncărcaţi şi o serie de operatori speciali unii având şi anumite particularităţi.

  1. Operatorii de incrementare şi decrementare

Făcând referinţă la operatorii de incrementare şi decrementare, trebuie de ţinut cont că fiecare dintre ei are două forme: prefix (++i sau --i) şi postfix (i++ sau i--). De aceea, dacă se doreşte o utilizare flexibilă a acestor operatori, este necesar de a supraîncărca atât forma prefix, cât şi forma postfix. Aceşti operatori pot fi supraîncărcaţi prin ambele metode: prin funcţii membre şi prin funcţii prietene. Deoarece operatorii sunt unari, rezultă că funcţiile care realizează supraîncărcarea fie că nu au parametri fictivi pentru metoda funcţiilor membre, fie au un parametru fictiv pentru metoda funcţiilor prietene. Pentru a obţine supraîncărcare şi pentru cealaltă formă, funcţia care realizează supraîncărcarea va fi dotată cu un parametru formal ne-utilizabil. Deci, vorbind despre supraîncărcarea operatorului de incrementare prin metoda funcţiilor membre, într-o clasă oarecare vor exista descrise prototipurile:

class nume_cl

{

. . .

tip_r operator ++ (); // forma prefix

tip_r operator ++ (int i); // forma postfix

. . .

};

Într-un mod similar va fi făcută descrierea pentru operatorul de decrementare, dacă este necesar acest lucru.

Pentru clasa concretă complex, vor fi următoarele prototipuri:

class complex

{

. . .

complex operator ++ ();

complex operator ++ (int i);

. . .

};

Prototipurilor acestea le corespund următoarele funcţii membre, care sunt incluse în descrierea clasei complex:

- forma prefix:

complex complex :: operator ++()

{

r++;

return *this;

}

- forma postfix:

complex complex :: operator ++(int i)

{

complex a= *this;

r++ ;

return a;

}

La supraîncărcarea operatorului de incrementare prin metoda funcţiilor prietene, într-o clasă oarecare vor exista descrise prototipurile:

class nume_cl

{

. . .

// forma prefix

friend tip_r operator ++ (nume_cl &ob);

// forma postfix

friend tip_r operator ++ (nume_cl &ob, int i);

. . .

};

Întrucât operatorul de incrementare schimbă obiectul asupra căruia acţionează, parametrii fictivi de tip obiect sunt transmişi prin referinţă, pentru ca transformarea lor în cadrul funcţiei să fie vizibilă şi în exteriorul funcţiei.

Cu referire la clasa complex, pot fi făcute următoarele descrieri:

- descrierea prototipurilor:

class complex

{

. . .

friend complex operator ++(complex &c);

friend complex operator ++(complex &c, int i);

. . .

};

- forma prefix:

complex operator ++(complex &c)

{

c.r++;

return c;

}

- forma postfix:

complex operator ++(complex &c, int i)

{

complex a = c;

c.r++;

return a;

}

Supraîncărcarea operatorului de decrementare se realizează într-un mod similar.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]