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.

24Curs 1-2. Să ne reamintim …element167copie bit cu bitadrelement26adrDacă structura de date a clasei conŃine pointeri ce alocă dinamic memorie,constructorul de copiere va trebui declarat explicit. Constructorul de copiere este ofuncŃie cu acelaşi nume cu cel al clasei, care primeşte ca argument o referinŃă la unobiect de tipul clasei. În cazul nostru, va trebui să declarăm un constructor de copiere:class elem_lista{public:int val;int* urmatorul;elem_lista(int);elem_lista(int,int);elem_lista(elem_lista&);~elem_lista();void afisez();};Fig. 1.26. al doilea obiect este o copie a primuluişi să-l implementăm#include ...elem_lista::elem_lista(elem_lista& obiectsursa){this->val=obiectsursa.val;this->urmatorul=new int(*obiectsursa.urmatorul);}inline elem_lista::~elem_lista(){if (urmatorul != NULL) delete urmatorul;}...void main(){...}Ce face constructorul de copiere în acest caz? În primul rând, primeşte caargument o referinŃă spre obiectul sursă. Apoi atribuie valoarea câmpului val dinobiectul sursă, câmpului val al noului obiect creat. Câmpul următorul al acestuiobiect se încarcă apoi cu adresa unui întreg creat dinamic şi în care se depuneconŃinutul adresei pointate de câmpul următorul din obiectul sursă. Vor rezultaastfel două obiecte care conŃin valori identice, dar la adrese diferite, lucru care se vedecu uşurinŃă în fig. 1.27.Ca o observaŃie, pointerul this este scris explicit în acest exemplu, doar dinmotive didactice. El este oricum creat ascuns de către compilator şi fără să fie scris.

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

Saved successfully!

Ooh no, something went wrong!