Extras din curs
4. Functii generice.
Exista multe functii (si clase) înrudite între ele, cu exceptia unor tipuri. De exemplu o functie care sorteaza un tablou de întregi va diferi foarte putin de un algoritm de sortare a unui tablou de reali.
Mecanismul sabloanelor (templates) creaza functii sau clase generice (parametrizate) utilizând tipurile ca parametri. Un sablon defineste o familie de functii, respectiv de clase.Aceste tipuri se specifica la definire, în mod generic, urmând apoi instantierea tipurilor generice cu tipuri concrete.
Mecanismul reutilizeaza codul sursa, prin expandare, în conditiile verificarii complete a tipurilor.
O entitate template descrie un sablon pentru un numar nespecificat de entitati concrete, înrudite între ele.
De exemplu, pentru calculul diferentei în valoare absoluta a doua valori întregi, reale sau întregi lungi s-ar putea scrie o varietate de functii supraîncarcate, care ar avea acelasi cod, diferind doar semnatura (tipul parametrilor, nu si numarul lor).
.........
5. Clase generice.
Clasele colectii contin obiecte de un tip particular (de exemplu o lista înlantuita de întregi sau un tablou de structuri. Se pot defini familii de clase colectii, membrii acestora diferind numai prin tipul elementelor.
Consideram clasa tablou de întregi: pentru a folosi un tablou de reali, de complecsi sau de siruri de caractere s-ar putea copia implementarea clasei, modificând tipul datelor si numele clasei. Astfel am avea clasele intArray, StringArray, ComplexArray, etc.
Familia de clase poate fi reprezentata printr-o clasa generica (parametrizata). Aceasta specifica modul în care pot fi construite clasele individuale, care se deosebesc numai prin tipul elementelor pe care le contin.
Instantierea unui sablon reprezinta generarea declararii unei clase dintr-o clasa parametrizata si un argument generic.
O versiune a sablonului pentru un argument particular poarta numele de specializare.
Utilizarea unei clase generice presupune generarea de catre compilator a fiecarei clase individuale, corespunzator tipurilor care instantiaza clasa generica.
O clasa generica se reprezinta astfel:
template <lista_argumente_generice> declarare_clasa;
Instantierea unei clase generice se face prin:
nume_clasa <lista_argumente_concrete> nume_obiect;
Preview document
Conținut arhivă zip
- Functii si clase generice.doc