38Visual C++. Programarea Interfeţelor Utilizator}coordy=y;cout
Capitolul 1. … noţiuni <strong>de</strong> <strong>programare</strong> obiectuală 39double Re;double Im;};Complex nr1, nr2;Să presupunem că am atribuit valori părţilor reale şi imaginare pentru variabilelenr1 şi nr2 şi dorim să efectuăm operaţia nr3=nr1+nr2. Pentru aceasta, fie că <strong>de</strong>clarăm ofuncţie, fie că facem operaţia <strong>de</strong> adunare în programul principal, va trebui să facemadunările separat pentru partea reală şi respectiv pentru partea imaginară:Complex Adun(Complex n1, Complex n2){Complex n3;n3.Re=n1.Re+n2.Re;n3.Im=n1.Im+n2.Im;return n3;}…void main(){Complex nr1, nr2, nr3;…nr3=Adun(nr1,nr2);}O modalitate <strong>de</strong> implementare a problemei mai apropiată <strong>de</strong> spiritul C++, este <strong>de</strong> are<strong>de</strong>fini operatorii aritmetici, astfel încât, dacă operanzii sunt numere complexe, să sepoată scrie direct instrucţiuni <strong>de</strong> forma nr3=nr1+nr2, nr3=nr1*nr2, etc. Pentru început,să <strong>de</strong>clarăm clasa Complex (într-un nou proiect Win32 Console Application, numitComplex):class Complex{double Re, Im;public:Complex(double Real=0, double Imag=0){Re=Real;Im=Imag;};void afisez();Complex& operator + (Complex&);friend Complex& operator - (Complex&, Complex&);};Ce conţine clasa? Am <strong>de</strong>clarat pentru structura <strong>de</strong> date doi membri privaţi, carevor implementa partea reală şi partea imaginară a numărului complex. Constructorulprimeşte două argumente <strong>de</strong> tip double, care au valorile implicite 0. De asemenea,clasa <strong>de</strong>clară o funcţie <strong>de</strong> afişare. Ca noutate, apare <strong>de</strong>clararea operatorului + subforma <strong>de</strong> funcţie membră a clasei şi respectiv a operatorului -, ca funcţie prietenă.Deoarece rezultatul unei operaţii între două numere complexe este tot un numărcomplex, cei doi operatori re<strong>de</strong>finiţi vor returna o referinţă la clasa Complex. De fapt,operatorul este interpretat ca o funcţie, dar cu un rol special. Operatorul + în cazulnostru va fi interpretat pentru secvenţa c=a+b ca şi c=a.functia+(b), iar pentrusecvenţa c=a-b, c=fuctia-(a,b).Să implementăm acum fişierul sursă:#inclu<strong>de</strong> H. Vălean, 2004