Cet exercice correspond à l'exercice «pas à pas» page 134 de l'ouvrage C++ par la pratique (3e édition, PPUR).

Introduction

Le but de cet exercice est d'illustrer la notion d'héritage en utilisant une hiérarchie de figures géométriques.

Dans le fichier figures.cc, commencez par définir des classes Rectangle et Cercle. Munissez-les d'attributs adaptés et d'une méthode surface.

Cliquez ici pour voir/cacher le code.



Ajoutons ensuite une classe « rectangle coloré ».
Cette classe doit simplement avoir un attribut de plus, couleur, disons de type unsigned int.

[Essayez de le faire par vous même avant de regarder la solution qui suit]

Cliquez ici pour voir/cacher le code.



Pour rendre ces classes un peu plus réalistes (et utilisables) ajoutons leur un constructeur à chacune (si ce n'est pas déjà fait) :

class Rectangle {
protected:
  double largeur;
  double longueur;
public:
  Rectangle(double larg, double L) : largeur(larg), longueur(L) {}
  // ... comme avant
...

class RectangleColore : public Rectangle {
protected:
  unsigned int couleur;
public:
  RectangleColore(double larg, double L, unsigned int c)
   : Rectangle(larg, L), couleur(c) {}
};

Testez avec ce main simpliste :

int main() {
  RectangleColore r(4.3, 12.5, 4);
  cout << r.getLargeur() << endl;
  return 0;
}

Continuez en définissant les classes suivantes :

  • La classe Figure, contenant deux attributs x et y (représentant le centre de la figure), une méthode affiche(ostream&) qui affiche simplement les coordonnées du centre et un constructeur prenant les coordonnées du centre.
  • et faites hériter les classes Cercle et Rectangle de la classe Figure
    (il faut donc modifier en particulier la classe Cercle)

[Essayez de le faire par vous même avant de regarder la solution qui suit]

Cliquez ici pour voir/cacher le code.



On peut maintenant tester que l'on hérite bien des propriétés de la classe Figure :

int main() {
  RectangleColore r(4.3, 12.5, 4);
  cout << r.getLargeur() << endl;
  r.affiche(cout);
  cout << endl;

  Cercle c;
  c.setCentre(2.3, 4.5);
  c.setRayon(12.2);
  c.affiche(cout);
  cout << endl;
  return 0;
}

Si vous êtes perdus, voici ici le code complet à ce stade.

[Testez ce programme : compilez le, exécutez le. Essayez ensuite d'autres utilisations pour bien comprendre. ]

Évidemment pour être plus intéressantes, il faudrait répercuter les possibilités de la classe Figure au niveau des constructeurs des classes Rectangle et Cercle, et éventuellement enrichir la méthode affiche.

Cliquez ici pour voir/cacher le code.



Testez le programme avec le main suivant :

int main() {
  RectangleColore r(4.3, 12.5, 4);
  cout << r.getLargeur() << endl;
  r.affiche(cout);
  cout << endl;

  Cercle c(12.2, 2.3, 4.5);
  c.affiche(cout);
  cout << endl;

  Rectangle r2(1.2, 3.4, 12.3, 43.2);
  r2.affiche(cout);
  cout << endl;

  return 0;
}

Dernière mise à jour le 16 mars 2014
Last modified: Sun Mar 16, 2014