Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Clase Sablon (Template)

c


Clase Sablon (Template)

Clasele Template (parametrizate sau generice) permit descrierea unor categorii de clase, care difera prin tipul unor atribute, acesta fiind descris generic (nu este precizat la descrierea clasei ci doar la instantierea obiectelor). O astfel de clasa abstracta va fi particularizata intr-o clasa conc 545b16f reta inlocuind tipul general cu un anumit tip ales.



Functii Sablon (Template)

Functiile Template (generice) contin si parametri formali generici care vor fi inlocuiti cu parametri de un anumit tip concret.

Exemplu

Functii Template

#include <iostream.h>

#include <conio.h>

template <class T>

T Max (T x, T y)

void main ()

//N&d - E usor sa gresesti!

Se observa ca putem folosi ca parametri actuali parametri de diverse tipuri, pentru care insa este definit operatorul > . Daca acest operator nu este definit pentru un tip de data cu care dorim sa lucram, sau nu corespunde cerintelor noastre, acesta va trebui redefinit sau chiar functia va fi rescrisa conform cerintelor.

Exemplu

Functii    Template

#include <iostream.h> #include <string.h>

#include <conio.h>

template <class T>

T Max (T x, T y)

char* Max(char* x, char* y)

void main ()

Clase Template

O clasa Template este un model (sablon) din care se vor genera diverse clase concrete prin particularizarea atributelor cu tip ambiguu (generic). O astfel de categorie de clase care difera prin tipurile atributelor sunt specificate printr-o clasa template pentru ca apoi sa fie generate diverse clase specifice corespunzatoare anumitor tipuri necesare aplicatiei.

Exemplu:

Clase Template

#include <iostream.h>

#include <conio.h>

template <class T>

class Vect

~Vect ( )

void CitV ( );

T MaxV ( );

};

template <class T>

void Vect<T>::CitV ()



template <class T>

T Vect<T>::MaxV ()

void main ()

Se observa ca in exemplul anterior s-au utilizat nu numai clase template ci si functii membru template.

Argumentele pot fi tipuri de date (class Nume_Tip) sau constante (Tip Nume_Parametru), de exemplu:

template <class T, int Dim>

Implementarea elementelor Template

In cele ce urmeaza ne vom referi la pozitia codului (care se expandeaza conform cerintelor utilizatorului) corespunzator obiectelor template. Codul template (corpul functiilor membru) trebuie sa fie vizibil acolo unde sunt utilizate elemente template.

Exista doua metode (posibilitati) de implementare:

a)      template smart - tot codul unei clase template este scris in fisierul header (definitii de clase, functii precum si implementarea functiilor), acest mod putand fi precizat fie prin optiunea de compilare -Jg, fie prin meniul Options , Compiler , C ++ options , optiunea Template Generation : Smart , programul urmand sa includa acest fisier cu toate descrierile.

b)      template manual - doar declaratiile elementelor template sunt scrise in fisierul header iar implemetarea facandu-se separat, in alt fisier. Acest mod trebuie precizat prin directiva #pragma option, utilizand optiunea de compilare -Jgd (urmeaza o definire publica a instantierilor unor elemente template) si optiunea -Jgx (urmeaza o declaratie externa a instantierilor template). Acest mod este ilustrat in urmatorul exemplu simplu:

Program Template Manual

#include <conio.h> #include <iostream.h>

# include 'C_Templ4.h'

# pragma option -Jgx

void main ()

Cpp Template .. Manual

#include <conio.h> #include <iostream.h>

#include 'C_Templ4.h'

template <class T, int Dim>

void Vect<T,Dim>::CitV (char *Mes)

template <class T, int Dim>

T Vect<T,Dim>::MaxV ()

Header Template Manual

template <class T, int Dim>

class Vect ;

# pragma option -Jgd

typedef Vect<int, 10> Vint10;

typedef Vect<float,10> Vflo13;





Document Info


Accesari: 1293
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )