Vous êtes sur la page 1sur 2

Mohammed AIRAJ

GSEII-1
ENSAF 2023/2024

TP C++ : Polymorphisme et Templates

1. La notion de Polymorphisme.
Une application peut se définir sous la forme d’une arborescence de classes, pour écrire un
code plus concis et plus générique, nous allons définir le concept de polymorphisme.
Tout en haut de l’arborescence d’un ensemble de classes, on définira une classe appelée root
ou mère, qui sera constituée d’au moins une méthode purement abstraite et qui par conséquent
ne sera pas instanciable mais dont on pourra définir un pointeur.
Exemple la classe Shape, définie en haut de l’arborescence Point, Cercle, Cylindre et
constituée des méthodes virtuelles qui retourneront la valeur 0. :
Et des méthodes purement abstraites AfficheName et Affiche, ce qui oblige à les redéfinir
dans toute classe de l’arborescence.

class Shape
{
public :
virtual float Perimetre () const { return 0.0 ; }
virtual float Aire () const { return 0.0 ; }
virtual float Volume () const { return 0.0 ; }
virtual void AfficheName () const = 0 ;
virtual void Affiche () const = 0 ;
virtual ~Shape(){cout << " Destruteur shape " << endl ; }
};

La classe Point hérite publiquement de la classe Shape.


Ecrire Un programme Test qui crée dynamiquement un Point P1(1.f,2.f), un Cercle C1(
3.f ,4.f,1.f) et un Cylindre Cyl1(5.f,6.f,2.f,3.f).
Allouer un tableau de Shape * dynamiquement, de dimension 3 et initialiser ce tableau par les
adresses P1, C1 , Cyl1.
Faire une boucle sur la dimension de ce tableau et appeler toutes les méthodes définies dans
Shape et constater que l’on peut ignorer le type des objets du tableau.
2. Les Templates de fonctions et de classes.
Les types des arguments d’une fonction peuvent être paramétrés, par exemple,
La fonction qui détermine le maximum entre deux nombres :
Template <class T> T Maximum ( T x , T y)
{
return x<y ?y :x ;
}
T peut prendre n’importe quel type: int, float, double…
De même , les types des attributs d’une classe peuvent être paramétrés.
Prendre l’exemple de la classe Point et paramétrer le type de l’abscisse et l’ordonnée du point
en donnant float le type par défaut.

Vous aimerez peut-être aussi