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

Create successful ePaper yourself

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

ordonare vector de obiecte<br />

void SortedArray::sort () {<br />

for (int j=1;j 0) {<br />

Object* b=vp[i];<br />

vp[i]=vp[i+1];<br />

vp[i+1]=b;<br />

}<br />

}<br />

Deoarece “Comparator” este o clasã abstractã (o interfatã, de fapt), nu putem avea<br />

o variabilã “Comparator” (nu pot exista obiecte de acest tip), dar putem avea o<br />

variabilã pointer la tipul “Comparator”, ca loc unde vom memora un pointer la un<br />

obiect de un subtip al tipului “Comparator”. Exemplu de comparator pentru obiecte de<br />

tip “Int”:<br />

// clasa abstracta ptr obiecte comparator<br />

class Comparator {<br />

public:<br />

virtual int compare (Object*,Object*)=0;<br />

};<br />

// comparator pentru obiecte Int<br />

class IntComp: public Comparator {<br />

public:<br />

int compare (Object* p, Object* q) {<br />

Int* ip = (Int*)p;<br />

Int* iq = (Int*)q;<br />

return ip->getVal() - iq->getVal();<br />

}<br />

};<br />

Exemplu de creare a unui obiect vector ordonat:<br />

SortedArray a (100, new IntComp());<br />

Este posibilã si chiar folositã combinarea derivãrii cu agregarea, ca metode de<br />

reutilizare a metodelor unor clase. Am putea avea, de exemplu, o clasã abstractã<br />

“Stack” (pentru stive abstracte), cu metode “push” si “pop”, iar una din subclasele<br />

sale instantiabile ar contine un obiect vector de obiecte (stive realizate ca vectori).<br />

Clase sablon (“Templates”)<br />

In programarea cu obiecte mai existã si o altã solutie pentru programarea genericã a<br />

unor colectii <strong>în</strong> care sã putem memora date de orice tip (tip primitiv sau tip clasã).<br />

Aceastã solutie se bazeazã pe clase “sablon” (“template”), clase pentru care se poate<br />

preciza la instantiere tipul datelor continute. La definirea clasei, tipul datelor folosite

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

Saved successfully!

Ooh no, something went wrong!