Compilation & Directives de préprocesseur Pointeurs, Références & Allocation Dynamique de Mémoire Spécificités du C++ (indépendantes de la POO) Structures & Classes Encapsulation des données Constructeur & Destructeur de classe Copie d'objets Amitié & Surcharge d'opérateur Héritage (Partie 1) Héritage (Partie 2) Patrons de fonctions et de classes Introduction à la librairie standard
Retour menu principal

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 classe A a accès à tous les membres et méthodes de A
  • Ainsi, la classe B est basée sur la classe A 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 de B,
    • la classe B que l’on dit dérivée ou classe fille de A est donc spécialisation de A.

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 (ici rectangle) à accéder aux membres de la classe de base (ici polygone)

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