Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
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