Héritage en C++

Introduction à l'héritage

En programmation orientée objet avec C++, l'héritage permet de créer une nouvelle classe à partir d'une classe existante, en héritant des propriétés et des méthodes de cette dernière. Ce mécanisme est particulièrement utile lorsque vous devez gérer plusieurs objets d'un même type ayant des caractéristiques communes.

Syntaxe de l'héritage

La classe qui reçoit les propriétés et méthodes s'appelle la classe dérivée (ou sous-classe), tandis que la classe d'origine est appelée classe de base. Voici un exemple de syntaxe :

class BaseClass {
  accessModifier:
    dataType property1;
    dataType property2;
};

class SubClass: public BaseClass {
  accessModifier:
    dataType subProp1;
    dataType subProp2;
};

Spécificateurs d'accès

Dans le cadre de l'héritage, les spécificateurs d'accès fonctionnent de la manière suivante :

  • Les membres publics de la classe de base restent publics dans la classe dérivée.
  • Les membres protégés de la classe de base sont accessibles par la classe dérivée, mais ne le sont pas en dehors de la classe.
  • Les membres privés de la classe de base ne sont pas accessibles depuis la classe dérivée.

Un exemple concret

Imaginons une classe de base appelée Shape qui pourrait inclure : - Une propriété center avec des coordonnées (x, y). - Une propriété weight définissant la largeur de ligne. - Une propriété color représentant une couleur de remplissage. - Une méthode translate qui déplace le centre.

Des sous-classes telles que : - Une classe Rectangle avec des propriétés height et width, ainsi qu'une méthode pour calculer le périmètre. - Une classe Circle avec une propriété radius et une méthode pour calculer la circonférence.

Ces sous-classes partageraient les propriétés et méthodes de Shape, tout en ayant leurs propres spécificités.

Voici comment cela pourrait être implémenté :

// Créer la classe de base Shape
class Shape {
public:
    int center[2];
    int weight;
    int color;
    void translate(int deltaX, int deltaY) {
        center[0] += deltaX;
        center[1] += deltaY;
    }
};

// Créer la sous-classe Rectangle
class Rectangle: public Shape {
public:
    int height;
    int width;
    int perimeter() {
        return (height + width) * 2;
    }
};

// Créer la sous-classe Circle
class Circle: public Shape {
public:
    int radius;
    float circumference() {
        return 2.0 * 3.1416 * float(radius);
    }
};