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.

Obiectele unei clase, ca orice alte variabile, au o duratã de viatã si o clasã de<br />

alocare, rezultate din locul unde au fost definite. Deci putem avea obiecte locale unei<br />

functii, care existã <strong>în</strong> memorie numai cât este activã functia, si obiecte externe<br />

functiilor, mentinute pe toatã durata executiei unui program. In plus, pot exista si<br />

obiecte alocate la cerere, fãrã nume, si adresate printr-un pointer; aceste obiecte<br />

dureazã pânã la distrugerea lor explicitã, prin eliberarea memoriei alocate.<br />

Functia complementara unui constructor, numita "destructor", este apelatã automat<br />

la disparitia unui obiect: la terminarea programului pentru obiectele statice, la iesirea<br />

dintr-o functie pentru obiectele locale (si parametri functiei), la folosirea operatorului<br />

delete pentru obiecte dinamice. Functia destructor nu are tip, iar numele ei derivã din<br />

numele clasei, precedat de caracterul tildã ('~').<br />

Functia destructor este definitã explicit <strong>în</strong> C++ mult mai rar ca un constructor,<br />

deoarece efectul nul al destructorului implicit este suficient pentru obiectele care nu<br />

contin date alocate dinamic (<strong>în</strong> Java nu sunt necesare functii destructor).<br />

Pentru clase ce contin date alocate dinamic, constructorul trebuie sã realizeze si<br />

alocarea de memorie necesarã, iar destructorul sã elibereze memoria alocatã de<br />

constructor. Exemplu:<br />

// destructor clasa IntArray<br />

~IntArray () { delete [ ] vec;}<br />

Un apel de metodã de forma<br />

a.add (x); // apeleaza metoda “add” pentru obiectul “a”<br />

este tradus de compilatorul C++ <strong>în</strong>tr-un apel de functie C de forma:<br />

add ( &a, x);<br />

<strong>în</strong> care primul argument este adresa obiectului pentru care se apeleazã functia clasei.<br />

In cadrul unei metode acest argument implicit de tip pointer (adresa obiectului) este<br />

accesibil prin cuvântul cheie "this", utilizat ca orice alt pointer. Un exemplu de<br />

utilizare este <strong>în</strong>tr-un constructor (sau <strong>în</strong>tr-o metodã) care are argumente formale cu<br />

acelasi nume ca variabile ale clasei:<br />

IntArray (int dmax=10, int inc =10) {<br />

this->dmax= dmax;<br />

this->inc= inc; d=0;<br />

vec= new int[dmax];<br />

}<br />

Exista si alte situatii de programare <strong>în</strong> care utilizarea variabilei “this” nu poate fi<br />

evitatã (de exemplu <strong>în</strong> definirea unor operatori).<br />

Operatori supradefiniti<br />

Prin clase se definesc noi tipuri de date, iar operatiile cu variabile de aceste tipuri<br />

sunt realizate prin functii (metode ale clasei sau functii “prieten” <strong>în</strong> C++). De exemplu<br />

adunarea a douã variabile de un tip “Complex” se va face astfel:

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

Saved successfully!

Ooh no, something went wrong!