Héritage (Partie 1)
Introduction
- L’héritage est un nouveau moyen de faire intéragir les classes entre elles par le biais de relations dites hiérarchiques
Introduction
- Une classe
B
qui hérite d’une classeA
a accès à tous les membres et méthodes deA
- Ainsi, la classe
B
est basée sur la classeA
mais peut également ajouter de nouveaux membres ainsi que de nouvelles méthodes propres à sa fonction :- la classe
A
que l’on appellera classe mère ou de base est une généralisation deB
, - la classe
B
que l’on dit dérivée ou classe fille deA
est donc spécialisation deA
.
- la classe
Notions d’héritage simple
class polygone { protected: unsigned int m_nombre_segment; }; class rectangle : public polygone { public: void set_largeur(const double largeur_); private: double m_longueur; double m_largeur; };
- La relation d’héritage est matérialisée par l’usage de la directive
public polygone
- Le mot-clé
protected
autorise la classe dérivée (icirectangle
) à accéder aux membres de la classe de base (icipolygone
)
Statut des membres et méthodes de classe
private
- les membres ne sont accessibles qu’aux méthodes et aux fonctions amies de la classe
protected
- les membres sont accessibles aux méthodes de la classe de base
ainsi qu’aux classes dérivées. Ils demeurent toutefois
inaccessibles à l’utilisateur de la classe contrairement au
statut
public
public
- les membres sont accessibles non seulement aux méthodes mais également à l’utilisateur de la classe c’est-à-dire à n’importe quel objet/instance du type de la classe
Appels des constructeurs et destructeurs
class polygone { public: polygone(const unsigned int nbr_segment_); protected: unsigned int m_nombre_segment; }; class rectangle : public polygone { public: rectangle(const double longueur_, const double largeur_); private: double m_longueur; double m_largeur; };
Appels des constructeurs et destructeurs
polygone::polygone(const unsigned int nbr_segment_) : m_nombre_segment(nbr_segment_) { }
rectangle::rectangle(const double longueur_, const double largeur_) : polygone(4), m_longueur(longueur_), m_largeur(largeur_) { }
Appels des constructeurs et destructeurs
- À la construction d’une classe fille, le constructeur de la classe mère est appelé avant toutes autres opérations
- Lors de la destruction d’une classe fille, le destructeur de la classe de base est appelé automatiquement après le destructeur de la classe fille