17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Complex a,b,c;<br />

a.add (b); // add este metoda a clasei Complex ( a += b)<br />

c= add (a,b); // add este functie prieten a clasei Complex ( c = a+b)<br />

In C++ (si <strong>în</strong> C#) este permisã supradefinirea operatorilor <strong>limbajul</strong>ui C, pentru a fi<br />

posibilã utilizarea lor cu variabile de tipul clasei <strong>în</strong> care au fost supradefiniti. Dacã<br />

supradefinim operatorii “+” si “=+” <strong>în</strong> clasa “Complex” atunci putem scrie:<br />

Complex a,b,c;<br />

a += b; // operator metoda a clasei Complex<br />

c= a + b; // operator functie prieten a clasei Complex<br />

Se foloseste cuvântul “supradefinire” (“override”) si nu “redefinire”, pentru cã<br />

rãmân valabile definitiile anterioare ale operatorului respectiv, la care se adaugã o<br />

nouã definitie (o nouã interpretare, <strong>în</strong> functie de tipul operanzilor).<br />

Operatorii binari “” sunt supradefiniti pentru clasele “ostream”,<br />

“ofstream” si respectiv “istream”, “ifstream”, pentru a exprima actiunile de “insertie<br />

valoare <strong>în</strong>tr-un flux de iesire” si respectiv “extragere valoare dintr-un flux de intrare”.<br />

Ei sunt operatori binari: primul operand este de tip “ostream” (“istream”), iar al doilea<br />

operand este de orice tip predefinit (char, int, float, double, char *, etc.). Pentru a fi<br />

utilizati si pentru operanzi de un tip clasã (de ex. “Complex” sau “Date”), ei trebuie<br />

supradefiniti <strong>în</strong> aceste clase.<br />

Un operator este privit <strong>în</strong> C++ ca o functie cu un nume special: numele este format<br />

din cuvântul cheie “operator” si caracterul sau caracterele ce reprezintã operatorul. O<br />

expresie de forma:<br />

a + b // a si b sunt obiecte de un tip clasa C<br />

este consideratã a fi echivalentã cu unul din apelurile urmãtoare:<br />

a.operator+ (b) // operator realizat ca metoda a clasei C<br />

operator+ (a,b) // operator realizat ca functie separata de clasa C<br />

Pentru cã functia operator trebuie sã aibã acces la datele locale clasei (“private”), ea<br />

este declaratã <strong>în</strong> clasa C ca functie prieten (cuvântul cheie “friend”).<br />

Un bun exemplu de clasã care necesitã diversi operatori este clasa “Complex”<br />

pentru numere complexe. Pentru <strong>în</strong>ceput vom defini doar operatorul de comparatie la<br />

egalitate a douã obiecte de tip complex, ca metodã a clasei :<br />

class Complex {<br />

private:<br />

double re, im;<br />

public:<br />

Complex (double re=0, double im=0) { // un constructor<br />

this-> re=re; this->im=im;<br />

}<br />

int operator == (Complex z) { // comparatie la egalitate

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!