Module 4 : Implantation de hiérarchies de classes Flashcards
classe – hérite de—
la dérivée hérite de la classe de base
Si la classe de base dispose d’un constructeur par défaut
oappelé automatiquement lors de la création de l’objet de la classe dérivée
Si la classe de base ne dispose pas d’un constructeur par défaut
oappeler le constructeur de la classe de base de façon explicite pour lui passer les paramètres requis
Construction et destruction : Ordre d’appel
Construction des objets de la hiérarchie
ode la classe de base tout en haut jusqu’à la classe dérivée.
Destruction des objets de la hiérarchie
ode la classe dérivée jusqu’à la classe de base
Visibilités
oPrivée : Accès interne de la classe.
oPublique : Accès à tous les utilisateurs.
oProtégée : Accès aux héritiers
Les méthodes d’une classe ont toujours accès aux attributs de la classe, peu importe la visibilité.
les données privées ne sont manipulables que par les méthodes de la classe à laquelle les données appartiennent.
L’héritage ne donne pas d’accès privilégié pour la visibilité privée
comment définir la hiérachie dans le fichier. h
inclure la clsse dont on hérite (#include <stdexcept), inclure le lien d’héritage (class ContratException : public std::logic_error)(class PreconditionException : public ContratException
)
Hérite de la classe logic error et ce qu’il y a au dessus. :
Public permet d’utiliser les méthodes et les attributs qui sont au dessus de l’hiérarchie. Il faut passer par un objet ContratException
L’utilisation de privée est très rare car elle ne permet pas d’utiliser les classe au dessus
Si on ne met pas public ça va être privée par défaut donc il ne faut pas l’oublier
Public: c’est-à-dire on peut appeler n’importe quelle méthode public ou protected de la classe de base
Définir la hiérarchie dans le fichier.cpp
Appeler le constructeur du parent (: std::logic_error(p_typeP),)Attributs de la classe courante
(m_expression(p_expressionP), m_fichier(p_fichierP), m_ligne(p_noLigne))
Lorsqu’une classe mère est héritée en mode privée par la classe fille, alors
Les membres protégés de la classe mère deviennent des membres privés de la classe fille
BLes membres publics de la classe mère deviennent des membres privés de la classe fille
statut dans la classe de base et accès aux fonctions membres et amies de la classe dérivée et et accès à un utilisateur de la classe dérivée
public, oui, oui
protégé, oui, non
privé, non, non
2 options d’implémentations.
Ici méthode statique (non relié un objet) on passe 2 points en paramètre donc on a pas besoin d’un objet courant.
Méthode non statique. Un point passer en paramètre avec un objet courant,
Remplacer, hériter, augmenter …
Une classe dérivée D peut décider de prendre action sur une méthode m() de la classe de base B:
La classe dérivée remplace la méthode B::m() par D::m() en implantant un algorithme différent.
La classe dérivée hérite de B::m() sans changement.
La classe dérivée augmente la méthode B::m() par une méthode D::m() qui appelle d’abord B::m() avant de faire d’autre tâches.
En C++, trois formes polymorphisme
oPolymorphisme ad hoc :
Surcharge de méthode(déjà vu)
oPolymorphisme paramétrisable :
Les templates
oPolymorphisme pur
polymorphisme pur
Mé thodes virtuelles , alli é es à l’h é ritage:
o
permet de rendre les programmes extensibles par l’h é ritage
de comportements existants
ajout de comportements sp é cifiques au besoin.
Traitement d une famille de classe s une hi é rarchie de
fa ç on g é n é rique .
o
On n’a pas à identifier le type de la classe avec un switch
comme dans les langages non OO.
Traitement g é n é rique à partir de la classe de base
m
é thodes virtuelles .
o
à l’ é chelle d’une hi é rarchie de classes.
Signature des méthodes virtuelles
Une fonction virtuelle doit avoir le même prototype (même signature et même type de retour) dans toutes la hiérarchie.
Une fois qu’une fonction a été déclarée virtuelle, elle le demeure dans toute la hiérarchie à partir de ce point.
que peut être virtuel
Seule une fonction membre peut être virtuelle
Un constructeur ne peut être virtuel
Un destructeur peut être virtuel