POO - TP4 C++

Héritage et collection

Exercice 1 : héritage, la faune de l'université

Dans cette étude béhavioriste, on définit en premier lieu la classe Personne. Celle-ci comporte les attributs nom, prenom et age, ainsi que les méthodes indispensables à son bon fonctionnement.

De cette première classe dérive les classes Etudiant et Professeur. La sous-classe Etudiant comporte, en plus des attributs de la classe mère Personne, un attribut de type Cursus, défini ci-dessous. La sous-classe Professeur comporte, en plus des attributs de la classe mère Personne, un attribut liste_d_enseignements de type Matiere.

Les deux dernières classes à définir sont les classes Cursus qui comporte les attributs intitule (une simple chaîne de caractères), responsable (de type Professeur) et liste_de_matieres (de type Matiere), et Matiere qui est caracterisée par l'unique attribut nom (une simple chaîne de caractères).

  1. Implanter les cinq classes ci-dessus.
  2. Concevoir le programme test qui permet de créer des étudiants et des professeurs, puis d'afficher leurs caractéristiques respectives.
  3. Une première utilisation (timide) de la notion de polymorphisme consiste à concevoir une fonction qui affiche le nom, le prénom et l'âge de toute personne créée et ce quelque soit son type. Implanter cette fonction.

Exercice 2 : classe collection, le gardien

Les collections (tables, ensembles, listes, vecteurs, dictionnaires) ont plusieurs implantations mais partagent un certain nombre d'opérations : insertion, vérification de l'ajout d'un élément particulier, retrait d'un membre, trie des éléments, examen des éléments dans un certain ordre, constructeur et destructeur.

On souhaite créer une classe collection Administration, chargée de gérer toutes les personnes, et cacher à l'utilisateur de cette classe la représentation de cette collection particulière. On doit donc fournir un ensemble d'opérations autorisant celui-ci à itérer sur la collection dans un certain ordre (une collection n'est pas intrinséquement ordonnée, aussi ne peut-on pas simplement offrir un moyen d'accéder au vecteur ; on pourrait souhaiter implanter cet ensemble sous la forme d'une liste chaînée).

Trois fonctions (au minimum) sont donc à fournir :

  • iterer(), pour initialiser une itération,
  • ok(), pour vérifier s'il existe un élément suivant,
  • suivant(), pour l'obtenir.

Construire la classe Administration afin de tenir compte de ce masquage. On peut, avec profit, surcharger le constructeur et les opérateurs int() et ++ afin d'itérer sur cette classe collection de manière plus naturelle.