Documente Academic
Documente Profesional
Documente Cultură
Ce ne propunem astăzi
Azi vom învăța cum să folosim tiparele din limbajul C++. Tiparele sunt o
caracteristică a limbajului de programare C++ care permite scrierea de cod fără
a lua în considerare tipurile de date ce vor fi utilizate la apelarea funcțiilor sau a
claselor. Tipurile neprecizate sunt furnizate ca parametri la momentul utilizării.
Tiparele permit programarea generică în limbajul C++, reprezentând primul nivel
de reutilizare, după clase, acela corespunzând situaţiilor de refolosire de clase
pentru diverse tipuri de variabile.
Tiparele sunt foarte utile programatorilor în C++ în special dacă sunt folosite în combinație cu
moştenirea multiplă şi supraîncărcarea operatorilor.
Pentru a înțelege mai bine termenul de tipar vom lua un exemplu concret. Avem o funcție care calculează
și returnează înmulțirea a două numere întregi:
int produs(int nr1, int nr2)
{
int produs;
produs = nr1 * nr2;
return produs;
}
Dacă vrem să înmulțim două variabile de tip float sau double funcţia nu este bună deoarece rezultatul
nu va mai fi precis ci se vor rotunji valorile la conversia de tip, de la float la int sau de la double la int,
trunchiind zecimalele care asigură exactitatea numărului.
Pentru a rezolva această problemă se pot folosi funcţiile tipar, astfel funcţia anterioară o vom rescrie în
felul următor:
template <class T>
T produs(T nr1, T nr2)
{
T produs;
produs = nr1 * nr2;
return produs;
}
void main()
{
float a = 3.6, b = 2;
int x = 3, y = 9;
cout << "Produsul numerelor reale este: " << produs(a, b) << endl;
cout << "Produsul numerelor intregi este: " << produs(x, y) << endl;
}
La fel ca și funcțiile tipar se pot crea și clase tipar. La crearea clasei tipar se vor defini toate funcțiile
care vor fi în interiorul acelei clase iar tipul datelor va fi specificat ca și parametru în momentul creării
obiectelor clasei respective.
O clasă tipar este utilă în momentul în care aceasta folosește modele ce pot fi generalizate. De exemplu,
dacă avem o clasă cu algoritmi pentru prelucrarea unor elemente a unui vector vom putea generaliza
tipul datelor din vector, acestea putând fi întregi, reale, caractere, etc. Astfel în momentul creării
obiectului compilatorul va genera automat tipul de date corect pe baza tipului specificat la apelare.
Forma generală a unei declarări de clasă tipar este:
template <class tip> class nume_clasă
{
...
}
tip este numele unui tip substituent care va fi specificat în momentul în care o clasă este
instanțiată
Dacă este nevoie se pot defini mai multe date generice utilizând o listă de date separate prin virgulă.
Pentru clasa generică se poate crea o instanță folosind următoarea formă generală:
nume_clasa <tip_date> obiect;
tip_date este numele tipului de date cu care clasa va rula funcțiile incluse.
Mai multe detalii despre tipare pot fi găsite în referința [1] la pagina 281.
Cu ce ne-am ales?
Prin programele prezentate ca exemple și problemele propuse de la partea
practică a laboratorului am reușit să ne familiarizăm cu tiparele în limbajul C++,
descoperind rolul acestora în programarea orientată pe obiecte. Utilizarea
tiparelor este un instrument puternic pentru a dezvolta programe ușor de adaptat
pentru situații diverse, punând la dispoziția noastră inclusiv colecții foarte utile
pentru creşterea productivităţii proiectării. Profesioniștii folosesc frecvent
tiparele!