Partea4 - 4 Supraîncărcarea operatorilor...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 4 Supraîncărcarea operatorilor Supraîncărcarea funcţiilor şi a operatorilor ( overloading ) sunt mecanisme importante în C++ care oferă flexibilitate şi extensibilitate limbajului. Pentru tipurile fundamentale ale limbajului sunt definite seturi de operatori care permit operaţii de bază executate într-un mod convenabil. Dar, după cum este cunoscut, în limbaj sunt definite prea puţine tipuri de date ca date fundamentale, iar pentru reprezentarea altor tipuri care sunt necesare în diferite domenii (cum ar fi aritmetica numerelor complexe, algebra matricilor, etc.), se definesc clase care conţin funcţii ce pot opera asupra acestor tipuri. Definirea operatorilor care să opereze asupra obiectelor unei clase permite un mod mult mai convenabil de a manipula obiectele decât prin folosirea unor funcţii ale clasei. O funcţie care defineşte pentru o clasă o operaţie echivalentă operaţiei efectuate de un operator asupra unui tip predefinit este numită funcţie operator. Majoritatea operatorilor limbajului C++ pot fi supraîncărcaţi, şi anume: new delete () +- * / % ^ & | ~ ! = < > +=-= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++-- ,->*-> Operatorul () este apelul unei funcţii, iar operatorul este operatorul de indexare. Următorii operatori nu se pot supraîncărca: . .* :: ?: sizeof Există câteva reguli care trebuie să fie respectate la supraîncărcarea operatorilor: • Funcţiile operator=(), operator()() şi operator() trebuie să fie membri nestatici ai clasei. • Cu excepţia funcţiei operator=(), toate celelate funcţii operator pot fi moştenite. 1 • Nu pot fi supraîncărcaţi operatorii pentru tipurile predefinite ale limbajului. • Funcţiile operator nu pot avea argumente implicite. Funcţiile operator pentru o anumită clasă pot să fie sau nu funcţii membre ale clasei. Dacă nu sunt funcţii membre ele sunt, totuşi, funcţii friend ale clasei şi trebuie să aibă ca argument cel puţin un obiect din clasa respectivă sau o referinţă la aceasta. Excepţie fac operatorii = , () , , -> , care nu pot fi supraîncărcaţi folosind funcţii friend ale clasei. De asemenea, funcţiile operator new() şi operator delete() au implementări mai deosebite care vor fi detaliate mai jos. 4.1 Funcţii operator membre ale claselor Forma generală pentru funcţiile operator membre ale clasei este următoarea: tip_returnat operator#(lista_argumente){ // operaţii } În această formă generală semnul # reprezintă oricare dintre operanzii care pot fi supraîncărcaţi. ■ Exemplul 4.1 Fie o clasă Point care descrie un vector într-un plan bidimensional prin două numere de tip double , x şi y . Valorile x şi y reprezintă coordonatele punctului de extremitate al vectorului. Pentru această clasă se pot defini mai multe operaţii cu vectori, ca de exemplu: • Suma a doi vectori • Diferenţa a doi vectori • Produsul scalar a doi vectori • Multiplicarea unui vector cu o constantă (scalare)...
View Full Document

This note was uploaded on 08/10/2009 for the course CS UCJ01001 taught by Professor Ionstoica during the Spring '09 term at 東京大学.

Page1 / 24

Partea4 - 4 Supraîncărcarea operatorilor...

This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online