Académique Documents
Professionnel Documents
Culture Documents
Les templates
Les templates
Les templates (appeles aussi modles ou patrons) reprsentent une technique favorisant la rutilisation et la spcialisation des fonctions et des classes. Les templates utilisent un type paramtr (ou fictif) qui reprsente le type de donne qui sera choisi (ou instanci) lutilisation du modle . 1. Les fonctions templates
Une fonction template permet de dfinir une fonction qui ralisera le mme traitement pour des types de donnes diffrents (type de donne paramtr qui sera connu au moment de lappel de la fonction). 1.1. syntaxe
Mohamed ELWAFIQ
107
Chapitre 11
Cours de C++
Les templates
1.2.
Description
- argument du template : scrit class type1, type2, o type1,type2...reprsentent le type paramtr (par convention on prend la lettre T , U ). - La fonction dclare peut utiliser ensuite le ou les types fictifs. 1.3. Exemple
Les fonctions surcharges suivantes : void affiche (short v) { cout <<Valeur : <<v<<endl; } //---------------------------void affiche (float v) { cout << Valeur : <<v<<endl; } //-------------------------------void affiche (double v) { cout <<Valeur : <<v<<endl; } peuvent tre suivante : remplaces par la fonction modle
template <class T> void affiche (T v) { cout << Valeur : <<v<<endl; } Et on peut faire des appels tels que :
Mohamed ELWAFIQ
108
Chapitre 11
Cours de C++
Les templates
void main () { short n=15 ; float x=3.7 ; double y=5.14 ; affiche(n) ; affiche(34) ; affiche(x) ; affiche(5.8) ; affiche(y) ; affiche(A) ; affiche(BONJOUR) ; } Remarque Une fonction arguments : template peut employer plusieurs
template <class T, class U> void affiche(T v1, U v2) { cout <<Valeur 1 : <<v1<<endl; cout <<Valeur 2 : <<v2<<endl; } Exercice Dfinir une fonction template ou modle appele max dont lobjectif est de renvoyer le plus grand des deux lments pass en argument. 2. Les classes templates
Mohamed ELWAFIQ
109
Chapitre 11
Cours de C++
Les templates
2.2. Description C++ impose pour dfinir le corps des fonctions membres demployer la syntaxe suivante : template <arguments du template> class nom de la classe <nom des arguments> :: fonction(arguments) { . } - Une classe modle ou template peut galement contenir des fonctions membres qui nutilisent pas les types paramtrs. Cependant, mme dans ce cas, le corps de la fonction doit respecter la contrainte lie au nom complet de la fonction membre. Exercice Ecrire un programme global partir des dfinitions suivantes : template <class T > class tableau { T valeurs[10]; int indice ; public : tableau() ; void ajouter(T v) ; T renvoyer (int i) ; int nombre_elements() ; };
Mohamed ELWAFIQ
110
Chapitre 11