12.07.2015 Views

notiuni de programare obiectuala - Informatica aplicata si ...

notiuni de programare obiectuala - Informatica aplicata si ...

notiuni de programare obiectuala - Informatica aplicata si ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

48Visual C++. Programarea Interfeţelor UtilizatorAm creat tabloul ptab[3] <strong>de</strong> pointeri la clasa ObGrafic. Deoarece primul elementpointează spre un obiect ObGrafic, al doilea spre un obiect Cerc şi al treilea spre unobiect Patrat, este un tablou neomogen.Există totuşi o observaţie legată <strong>de</strong> programul <strong>de</strong> mai sus: dacă este rulat, se poateobserva că memoria nu se eliberează corect! Este apelat <strong>de</strong> trei ori <strong>de</strong>structorul claseiObGrafic, dar nu se apelează nicăieri <strong>de</strong>structorii claselor <strong>de</strong>rivate! Această problemăapare datorită faptului că <strong>de</strong>structorii nu au fost <strong>de</strong>claraţi virtuali. Un pointer la clasa<strong>de</strong> bază, va apela doar <strong>de</strong>structorul clasei <strong>de</strong> bază. Problema se rezolvă folo<strong>si</strong>nd totmecanismul funcţiilor virtuale şi <strong>de</strong>clarând <strong>de</strong>structorii claselor ca fiind virtuali.Destructorul distruge obiectele ObGrafic, pointate <strong>de</strong> ptab[i]adr. ObGrafic adr. ObGrafic adr. ObGraficptabObGrafic Cerc PatratAşadar, codul corectat este:class ObGrafic{public:ObGrafic();virtual ~ObGrafic();virtual void Desenez();} ;class Cerc: public ObGrafic{public:Cerc();virtual ~Cerc();virtual void Desenez();};class Patrat: public ObGrafic{public:Patrat();virtual ~Patrat();virtual void Desenez();};Figura 1.28. Eliberarea incorectă a memorieiDestructorul este virtual, distruge corect obiectele pointatea dr. Ob Grafic a dr. Ob Grafic a dr. Ob GraficptabObGrafic Cerc PatratFigura 1.29. Eliberarea corectă a memoriei

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

Saved successfully!

Ooh no, something went wrong!