0% ont trouvé ce document utile (0 vote)
21 vues19 pages

Chapitre 6 - 1 Le Polymorphisme

Transféré par

trikiyoussef66
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues19 pages

Chapitre 6 - 1 Le Polymorphisme

Transféré par

trikiyoussef66
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

Chapitre 6 : Polymorphisme

Niveau : 2A / 2P
Equipe C++
Enseignante :

Mme Soumaya Argoubi

Année universitaire :2023-2024

1
Plan du chapitre
Introduction

Héritage de type

Résolution statique des liens

Méthodes virtuelles et virtuelles pures

Résolution dynamique des liens

Collection d’objets polymorphes

Classes abstraites

Résumé

28/04/2020 2
Introduction
• Définitions:

⮚ Le mot polymorphisme vient du Grec et décrit ce qui peut prendre plusieurs


formes.

⮚ En informatique c’est un concept orienté objet qui permet au programmeur de


manipuler différentes formes d'une même classe d’une façon unique.

⮚ Donc, il permet de faire une abstraction des détails relatives aux classes dérivées
d’une classe mère.

3
Introduction
• Exemple :

▪ La classe Etudiant hérite de la classe Personne 🡺


Etudiant est une forme de Personne.
Classe Personne

Etudiant E;
Héritage
▪ E peut être manipulé soit comme :

Classe Etudiant ✔ Un objet de la classe Etudiant.


✔ Un objet de la classe Personne.

4
Héritage de type
Personne
Personne P; Correct, mais seule la partie « Personne » de E fait l'objet de
Etudiant E; l'affectation : les attributs CIN, nom et prenom. # CIN
🡺 Perte d’information (attributs classe et moyenne) # nom
P = E; # prenom

E = P; Incorrect, une Personne n'est pas forcément un Etudiant.


Les attributs classe et moyenne resteront sans affectation !!

Héritage
Personne* ptrPerso = &P;
ptrPerso = &E; Etudiant

- classe
ptrEtd doit contenir l’adresse d’un objet de la - moyenne
classe Etudiant.
Etudiant* ptrEtd = &P; P est un objet de la classe Personne et n'est pas,
donc, forcément un Etudiant.
5
Résolution Statique des liens
En C++, par défaut,
il y a une
résolution statique
des liens

Laquelle des deux méthodes


« afficher() » sera appelée lors
de l’exécution ?

28/04/2020 6
Résolution Dynamique des liens

⮚ Le polymorphisme représente la capacité du système à choisir dynamiquement la


méthode qui correspond au type de l’objet en cours de manipulation.
🡺 La résolution dynamique des liens

• Si on désire que la méthode appelée sera celle de la classe Etudiant, il faut autoriser
la résolution dynamique des liens !

• Le choix de la méthode à exécuter sera selon le type réel de l’objet manipulé.

• 2 conditions nécessaires : Références + Méthodes Virtuelles


?
28/04/2020 7
Méthodes virtuelles et virtuelles pures
1- Méthodes Virtuelles:

• Une méthode virtuelle est une méthode qui peut être redéfini dans une classe
fille.
• Toute redéfinition d’une méthode virtuelle dans une sous classe sera
automatiquement virtuelle.

🡺 Ce n’est pas obligatoire d’écrire le mot clé « virtual » aux niveaux des classes
dérivées.
• virtual Type nom_fonction (arguments) [const] ;

• Exemple : class A
{
virtual void afficher() const { cout << ’A’ << endl; }
}; 8
Méthodes virtuelles et virtuelles pures
2- Méthodes Virtuelles pures:

• Une méthode est dite virtuelle pure, ou abstraite, si elle n’a pas de « corps ».

• Exemple: La méthode surface () dans une Classe FormeGeo.

• On connait la surface d’un cercle, un rectangle, un triangle mais on ne peut pas définir la
surface d’une forme géométrique en générale.

🡺 la méthode surface () est une méthode abstraite.

• virtual TypeDeRetour nomMethode (types et liste d’arguments) = 0;


28/04/2020 9
Classes abstraites

• C’est une classe qui a au moins une méthode virtuelle pure.

• Elle ne peut pas être instanciée.

• Toutes ses classes filles restent abstraites tant qu’elles ne définissent pas toutes
les méthodes virtuelles pures qu’elles héritent.

🡺Exemple : La classe FormeGeo sera une classe abstraite.

28/04/2020 10
Revenons à notre exemple !

Comment résoudre ce
problème pour faire appel à la
méthode afficher() de la classe

Etudiant ?
28/04/2020 11
Résolution Dynamique des liens

12
Résolution Dynamique des liens

Personne *P = new Etudiant();

delete P; Appel: Destructeur Personne Appel: Destructeur Etudiant


uniquement. puis Destructeur Personne
13
Résolution Dynamique des liens

• Le destructeur d’une classe peut être défini comme virtuel.

• Utilité : Détruire un objet d’une classe fille qui est référencé par un pointeur de
la classe mère.

• Conséquence : Si le destructeur est virtuel, il y aura exécution du destructeur


de la classe fille puis celui de la classe mère. Sinon seul le destructeur de la
classe de mère est appelé.

28/04/2020 14
Collection d’objets polymorphes
• Exemple : ▪ Si on a une collection contenant des objets instanciés de
plusieurs classes qui héritent de la classe Personne, on
P peut manipuler tous ces objets de la même manière car ils
Personne sont tous des objets de la même super classe.

TabPerso.push_back(E);
Héritage
▪ Vector <Personne> TabPerso;
🡺Résolution statique des
E liens

Etudiant Enseignant ▪ Vector <Personne * > TabPerso;

TabPerso.push_back(&E);
+ Méthode(s) virtuelle(s)
28/04/2020 🡺Résolution dynamique des liens 15
Collection d’objets polymorphes

🡺 Manipulation homogène de différentes instances d’une hiérarchie commune bien


que leurs comportements sont distincts.

🡺 C’est l’une des utilisations les plus fréquentes du Polymorphisme.

28/04/2020 16
A retenir
⮚ Un objet polymorphe est un objet susceptible de prendre plusieurs formes
pendant l’exécution.
⮚ La notion de polymorphisme n’a de sens que dans un contexte d’héritage.

⮚ Une classe fille hérite les attributs, les méthodes et le type de sa classe mère.

⮚ Une méthode virtuelle est une méthode qui sera redéfinie par une ou plusieurs
classes filles. (expl: la méthode afficher() et le destructeur)

⮚ Résolution dynamique des liens : Référence + Méthode virtuelle.

⮚ Une collection d’objets polymorphes permet de manipuler différentes instances


d’une hiérarchie commune de la même façon.

⮚ Une classe abstraite est une classe qui a au moins une méthode virtuelle pure.

28/04/2020 17
Bibliographie & Netographie

• Cours de C/C++, Christian Casteyde.

28/04/2020 18
TD 6

28/04/2020 19

Vous aimerez peut-être aussi