12.07.2015 Views

Cursul POO - Informatica aplicata si programare - Universitatea ...

Cursul POO - Informatica aplicata si programare - Universitatea ...

Cursul POO - Informatica aplicata si programare - Universitatea ...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

22Curs 1-2. Să ne reamintim …caz, va trebui ca la terminarea domeniului de existenŃă a obiectului, zona de memoriealocată dinamic să fie eliberată. Acest lucru se face de o altă funcŃie specială, numitădestructor.O clasă poate declara destructorul, care este apelată automat de compilator înmomentul distrugerii obiectelor din acea clasă. FuncŃia destructor nu returnează nici ovaloare, iar numele ei este format cu construcŃia ~nume_clasă. Destructorul nuprimeşte nici un parametru. O clasă poate avea un <strong>si</strong>gur destructor. De obicei, roluldestructorului este de a dealoca memoria alocată dinamic în constructor.Pentru eliberarea memoriei alocate, se poate folo<strong>si</strong> în continuare funcŃia free, darse recomandă folo<strong>si</strong>rea operatorului delete.Să modificăm declaraŃia clasei ca mai jos:class elem_lista{int val;int* urmatorul;public:elem_lista(int);elem_lista(int,int);~elem_lista();void afisez();};FuncŃia nou adăugată este destructorul clasei. Implementarea lui va fi:#include #include "Constructori.h"...inline elem_lista::elem_lista(int valoare1, int valoare2){val=valoare1;urmatorul=new int(valoare2);}inline elem_lista::~elem_lista(){if (urmatorul != NULL) delete urmatorul;}...}Destructorul va fi apelat automat la terminarea programuluiAm învăŃat că în C++ o variabilă poate fi iniŃializată la declarare. În mod absolut<strong>si</strong>milar şi un obiect poate fi iniŃializat la declarare. Putem scrie de exemplu, în cazulclasei declarate în primul program,punct_plan punct1;punct_plan punct2=punct1;În acest caz, cel de-al doilea obiect al clasei va fi construit în mod identic cuprimul. Pentru construirea obiectului punct2, compilatorul apelează (şi creazăimplicit) un nou constructor, numit constructor de copiere. Constructorul de copierenu face altceva decât să rezerve memorie pentru structura de date al celui de-al doilea

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

Saved successfully!

Ooh no, something went wrong!