Académique Documents
Professionnel Documents
Culture Documents
1
Introduction
Pour améliorer la réutilisabilité des codes, le C++ propose la
notion de généricité qui permet d’écrire du code générique en
paramétrant des fonctions et des classes par un type de
données. Un modèle générique (d’une fonction ou d’une classe),
n’est alors pas directement utilisable : c’est plutôt un template
(Patron) du programme qui sera «instancié » par les types de
paramètres qu’il accepte. Dans ce chapitre, nous abordons les
templates de fonctions et de classes.
2
Introduction
Position du problème :
Si on définit une fonction avec des attributs int, et on désire avoir la
même fonction mais avec des attributs de type float, on doit
reconstruire une nouvelle fonction.
Solution:
Pour éviter la réécriture de plusieurs surcharges de la fonction, on peut
utiliser un Template (Patron) de la fonction.
Le template décrit une interface et un modèle pour construire des
fonctions et des classes en C++.
Le type des attributs devient un paramètre symbolique
3
Fonction Template
Définition:
Un template d'une fonction est une fonction dont le type de
retour et le type des arguments n'est pas fixé. Il constitue une
alternative à la surcharge (ou la redéfinition), qui permet donc
de gagner en performances, en temps de codage, et surtout en
clarté.
5
Fonction Template
Syntaxe :
Nous allons déclarer un template qui englobe toutes les formes de la
fonction calculSom.
Remarque:
Les paramètres par1 et par2, n’ont pas un type prédéfini mais ils
doivent cependant, avoir le même Type.
6
Fonction Template
Exemple:
7
Fonction Template
Les paramètres:
Il est possible de définir un
template avec des arguments
de types différents. Par
exemple, additionner un int
avec un double, on obtient les
formes suivantes:
8
Fonction Template
Les paramètres:
9
Fonction Template
Exemple:
10
Fonction Template
Remarque:
Notre fonction template renvoie une donnée de type Type2. Si l'on envoie a en
deuxième argument, le type de retour devient donc int. Ainsi, la valeur de b est
transformée en int (au lieu de float). Aussi, Type1 et Type2 peuvent être le même
type.
Surcharger un Template:
Les fonctions templates sont avant tout des fonctions, ce qui induit qu'elles peuvent
être surchargées. Si l'on reprend la fonction calculSom, il nous est possible de la
surcharger par exemple comme ceci:
11
Fonction Template
Exercice 1:
Créer un template de
fonctions permettant de
calculer la somme d’un
tableau d’éléments de
type quelconque. Le
template reçoit en
argument le tableau et le
nombre d’éléments de ce
tableau.
12
Classe Template
Introduction:
La déclaration et la définition d'une classe template se font comme celles d'une
fonction template : elles doivent être précédées par la déclaration template des
types génériques. Une classe template est une classe dans laquelle le Type des
attributs peut changer.
Exemple:
Pour bien comprendre le fonctionnement de la classe template, reprenons la
classe rectangle qu’on a déjà utilisée. Un rectangle possède deux attributs :une
peut avoir les méthodes Move et Zoom, pour déplacer et changer la taille du
rectangle. 13
Classe Template
Déclarations:
Remarque:
Pour définir la méthode à l’extérieur de la
classe on utilise la forme suivante:
14
Classe Template
Le type des attributs: Classe rectangle
Maintenant que nous avons modélisé la
classe, il est temps de réfléchir aux Attributs: Largeur, Hauteur
types des attributs. Méthodes: Move, Zoom
15
Classe Template
Constructeur:
Remarque:
Comme toute classe
simple, on peut définir
le constructeur à
l’intérieur ou à
l’extérieur de la classe
16
Classe Template
Instanciation d'une classe template:
18
Classe Template
Exercice 2:
On considère un template d’une classe
Point tel que:
Créer un template de classe Cercle qui
manipule le template Point pour définir
le centre. Cercle doit contenir un
constructeur et une fonction qui
affiche les attributs du cercle. Les
coordonnées et le rayon peuvent avoir
des types différents. 19
Classe Template