L’aéroport revisité [pm03] - Exercice
Karine Zampieri, Stéphane Rivière
Unisciel algoprog Version 21 mai 2018
Table des matières
1 L’aéroport revisité / pgaeroport2 1
1.1 Classes de Véhicules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Classe Aeroport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Programme de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
C++ - L’aéroport revisité (TP)
Mots-Clés Polymorphisme d’inclusion
Requis Classes, Classes (suite), Pointeurs, Héritage
Difficulté • ◦ ◦ (1 h)
Objectif
Cet exercice illustre le polymorphisme en utilisant une collection hétérogène de véhicules.
1 L’aéroport revisité / pgaeroport2
1.1 Classes de Véhicules
On souhaite créer une classe Aeroport permettant de gérer un ensemble de véhicules
constitué à la fois de voitures et d’avions.
Soient les définitions des classes Vehicule, Voiture| et \lstinlineAvion@ définies dans
l’exercice cité supra.
C++ @[[Link]] @[[Link]]
@[[Link]] @[[Link]]
@[[Link]] @[[Link]]
Incluez le(s) fichier(s) téléchargé(s) dans votre programme.
1
Unisciel algoprog – L’aéroport revisité [pm03] 2
Parcourez les classes de véhicules (Vehicule, Voiture et Avion|) et ajoutez le terme \lstinlinevirtual@
devant chaque méthode devant être virtuelle.
Supprimez toute méthode inutile du fait de la virtualité.
Orientation
Dans cet exercice, il y en a une seule.
Vérifiez que votre classe Vehicule définit le destructeur de façon virtuelle (puisque c’est
la classe de base).
1.2 Classe Aeroport
Manipulant des types d’objets différents (ici deux), pour garantir que la méthode invo-
quée est bien celle se rapportant à l’objet réel (et non à celle de la classe parente), nous
avons définis deux tableaux différents :
class Aeroport {
public:
void afficher() const;
void vider();
private:
vector<Voiture> m_garage; // parc de voitures
vector<Avion> m_hangar; // hangar d’avions
};
On souhaiterait maintenant pouvoir écrire cette classe comme suit :
class Aeroport {
public:
void afficher() const;
void ajouter(const Vehicule&);
void vider();
private:
vector<Vehicule> parc;
};
Pour indifféremment mettre dans le tableau dynamique des voitures et des avions, en
d’autres termes utiliser le polymorphisme (ou typage dynamique), il faut utiliser des
pointeurs (ou références) sur des objets plutôt que les objets eux-mêmes et donc utiliser
un vecteur de pointeurs (ou références) sur des véhicules, d’où :
class Aeroport {
public:
void ajouter(Vehicule*); //<- POINTEUR
private:
vector<Vehicule*> parc; //<- POINTEUR
};
Pour que le polymorphisme puisse être mis en oeuvre, il faut aussi que les méthodes que
l’on appelle sur les objets de type Vehicule soient virtuelles. De cette façon, si parc[k]
est un pointeur sur un avion, alors
Unisciel algoprog – L’aéroport revisité [pm03] 3
parc[k]->afficher
fera appel à la méthode d’affichage de la classe Avion et non celle de Vehicule.
Soit la définition de la classe Aeroport définie dans l’exercice cité supra. Il s’agit de définir
la nouvelle classe en modifiant celle-ci.
C++ @[[Link]] @[[Link]]
Modifiez les attributs en remplaçant le garage et le hangar par un vecteur de pointeurs
sur des Vehicule nommé parc.
Afin d’éviter les méthodes implicites, interdisez le constructeur de recopie et l’affectation
sur des Aeroports.
Écrivez le destructeur qui fera appel à la procédure vider afin de libérer proprement les
instances dynamiques.
Vérifiez que votre méthode charger(fn) n’a nul besoin d’être modifiée : elle est proprement
écrite.
Écrivez un accesseur size du nombre d’éléments dans le parc.
Écrivez une méthode ajouter(v) qui ajoute une instance dynamique de Vehicule v au
parc courant.
Réécrivez la méthode calculer(annee) puis supprimez les deux méthodes internes calculerGarage
et calculerHangar qui ne servent plus.
Réécrivez la méthode vider qui doit libérer les instances dynamiques puis vider le
conteneur.
Modifiez les méthodes ajouterVoiture et ajouterAvion de sorte qu’elles créent et ajoutent
une instance dynamique au parc.
1.3 Programme de test
Modifiez votre programme afin qu’il :
• Demande un nom de fichier contenant les données.
• Charge ce fichier.
• Affiche les données du parc.
• Enfin calcule le prix de l’argus de chaque véhicule.
Unisciel algoprog – L’aéroport revisité [pm03] 4
Téléchargez le fichier des données :
@[[Link]]
V Peugeot 1998 14732 2.5 5 180 12000. #voiture
V Porsche 1985 25000 6.5 2 280 81320. #voiture
V Fiat 2001 732 1.6 3 65 3000. #voiture
A Cessna 1972 123067 1 250 #avion
A Nain_C 1992 432109 0 1300 #avion
Testez. Résultat d’exécution :
Nom du fichier des donnees? [Link]
** Voiture: 2.5 litres, 5 portes, 180 CV, 12000 km
Veh: m = Peugeot, a = 1998, achat = 14732, argus = 11638.3
** Voiture: 6.5 litres, 2 portes, 280 CV, 81320 km
Veh: m = Porsche, a = 1985, achat = 25000, argus = 9500
** Voiture: 1.6 litres, 3 portes, 65 CV, 3000 km
Veh: m = Fiat, a = 2001, achat = 732, argus = 585.6
** Avion: HELICES, 250 heures de vol
Veh: m = Cessna, a = 1972, achat = 123067, argus = 92300.2
** Avion: REACTION, 1300 heures de vol
Veh: m = Nain_C, a = 1992, achat = 432109, argus = 375935
Purge des instances dynamiques....
Purge du conteneur...