0% ont trouvé ce document utile (0 vote)
50 vues20 pages

Ch6 Polymorphisme

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1/ 20

POO sous C++

Le Polymorphisme

Med. AMNAI

Filière SMI - S5

Département d’Informatique

5 janvier 2021
Redénition des fonctions
Fonction virtuelle
Classe Abstraite
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Plan

1 Redénition des fonctions

Med AMNAI Construction & Destruction d'Objets 2 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Plan

1 Redénition des fonctions


2 Fonction Virtuelle

Med AMNAI Construction & Destruction d'Objets 2 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Plan

1 Redénition des fonctions


2 Fonction Virtuelle
3 Classe Absraite

Med AMNAI Construction & Destruction d'Objets 2 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Plan

1 Redénition des fonctions


2 Fonction Virtuelle
3 Classe Absraite
4 Interfaces

Med AMNAI Construction & Destruction d'Objets 2 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Plan

1 Redénition des fonctions


2 Fonction Virtuelle
3 Classe Absraite
4 Interfaces
5 Polymorphisme

Med AMNAI Construction & Destruction d'Objets 2 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Principe
Interfaces Contexte du polymorphisme
Polymorphisme
Polymorphisme et Surcharge
Principe
(redif0.cpp)

Med AMNAI Construction & Destruction d'Objets 3 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Principe
Interfaces Contexte du polymorphisme
Polymorphisme
Polymorphisme et Surcharge
Exemple

Med AMNAI Construction & Destruction d'Objets 4 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Principe
Interfaces Contexte du polymorphisme
Polymorphisme
Polymorphisme et Surcharge
Discussion

• Le pointeur 'p' est utilisé pour stocker l'adresse d'un objet de


la classe 'materiel', appeler la fonction 'ache' et détruire
l'objet créé.
• Le pointeur 'p' est ensuite utilisé pour réaliser les mêmes
opérations sur un objet de la classe 'micro'.
• Dans le cas des deux objets créés, c'est la méthode 'ache'
de la classe 'matériel' qui a été utilisée. Le compilateur a donc
tenu compte du type de pointeur (matériel*) et non du type
d'objet pointé par 'p'.

Med AMNAI Construction & Destruction d'Objets 5 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Principe
Interfaces Contexte du polymorphisme
Polymorphisme
Polymorphisme et Surcharge
Discussion (suite)

• L'idéal serait donc que le compilateur appelle ache de micro


quand p pointe sur micro et ache de matériel quand p
pointe sur matériel.
• Pour obtenir ce résultat, il sut d'indiquer au compilateur que
la fonction ache est une fonction polymorphe, c.à.d une
fonction virtuelle.

Med AMNAI Construction & Destruction d'Objets 6 / 16


Redénition des fonctions
Fonction virtuelle Dénition
Classe Abstraite Règles
Interfaces Fonction virtuelle pure
Polymorphisme
Polymorphisme et Surcharge
Dénition

• Une fonction virtuelle est une fonction membre déclarée dans


la classe de base et redénie (Overriden) par la classe dérivée.
• Les fonctions virtuelles garantissent que la fonction correcte
est appelée pour un objet (voir le polymorphisme).
• Les fonctions virtuelles sont déclarées avec un mot clé
virtual dans la classe de base.

Med AMNAI Construction & Destruction d'Objets 7 / 16


Redénition des fonctions
Fonction virtuelle Dénition
Classe Abstraite Règles
Interfaces Fonction virtuelle pure
Polymorphisme
Polymorphisme et Surcharge
Règles d'utilisation
• Une fonction virtuelle public.

• Une fonction virtuelle Ne peut pas être statique et ne peut


pas être une fonction amie d'une autre classe.
• Le prototype d'une fonction virtuelle doit être identique dans
la classe de base et dans la classe dérivée.
• La fonction virtuelle est toujours dénie dans la classe de
base et redénie dans la classe dérivée. Il n'est pas
obligatoire que la classe dérivée écrase (ou redénisse la
fonction virtuelle).
• Une classe peut avoir un destructeur virtuel, mais elle ne
peut pas avoir de constructeur virtuel.
Med AMNAI Construction & Destruction d'Objets 8 / 16
Redénition des fonctions
Fonction virtuelle Dénition
Classe Abstraite Règles
Interfaces Fonction virtuelle pure
Polymorphisme
Polymorphisme et Surcharge
Fonction virtuelle pure

• Une fonction virtuelle pure est déclarée en aectant 0 à la


déclaration..
• Une fonction virtuelle pure (ou fonction abstraite) est une
fonction virtuelle, mais sans implémentation.

Med AMNAI Construction & Destruction d'Objets 9 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Dénition
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Dénition
Une classe est considérée abstraite si elle contient au moins une
fonction virtuelle pure (Abstraite).

Med AMNAI Construction & Destruction d'Objets 10 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Dénition
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Remarques

• On peut avoir un pointeur ou une référence de type classe


Abstraite mais pas un object de type classe Abstraite.
• Si on ne redénit pas la fonction virtuelle pure dans la
classe dérivée, cette classe est considérée elle aussi abstraite.
• Une classe abstraite peut avoir des constructeurs.

• Une classe qui n'est pas abstraite est nommée classe


concrête.

Med AMNAI Construction & Destruction d'Objets 11 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Dénition
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Dénition

• Une interface est une classe particulière qui ne dénit aucune


de ses fonctions. Toutes les fonctions doivent être virtuelles
pures (Abstraites).
• Une interface décrit le comportement d'une classe C ++ sans
s'engager dans une implémentation particulière de cette classe.

Med AMNAI Construction & Destruction d'Objets 12 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Polymorphisme
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Polymorphisme (1)
• Signie avoir plusieurs formes. En général, le polymorphisme
se produit lorsqu'il existe une hiérarchie de classes et qu'elles
sont liées par héritage.
• Signie qu'un appel à une fonction membre entraînera
l'exécution d'une fonction diérente en fonction du type
d'objet qui appelle la fonction (poly0.cpp).

Med AMNAI Construction & Destruction d'Objets 13 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Polymorphisme
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Polymorphisme (2)
• Si la fonction de la classe de base n'est pas virtuelle, le
compilateur considère que c'est la version nale de cette
fonction. C'est appelé Résolution statique. La fonction à
appeler est précisée avant l'exécution.
• Pour changer ce comportement et laisser le choix de la
fonction se fait à l'exécution, la fonction de la classe de
base doit être virtuelle.

Med AMNAI Construction & Destruction d'Objets 14 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Polymorphisme et Surcharge
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Polymorphisme et Surcharge (1) ? ?
Que va acher ce programme ?

Med AMNAI Construction & Destruction d'Objets 15 / 16


Redénition des fonctions
Fonction virtuelle
Classe Abstraite Polymorphisme et Surcharge
Interfaces
Polymorphisme
Polymorphisme et Surcharge
Polymorphisme et Surcharge (2) ? ?
Que va acher ce programme (polySurCh2.cpp) ?

Med AMNAI Construction & Destruction d'Objets 16 / 16

Vous aimerez peut-être aussi