Série 21 :
Polymorphisme
Buts
Cette série a pour but de vous faire découvrir les bases du polymorphisme.Préliminaires :
Avant de commencer les exercices décrits dans
cette série, créez le répertoire
~/Desktop/myfiles/Programmation/cpp/serie21 et travaillez dans ce
répertoire pour les exercices
ne faisant pas partie du projet.
Si vous n'avez pas le temps de faire la partie "exercices" de la série, veillez au moins à en consulter le corrigé.
Exercice 0 : reprise de l'exemple du cours (Polymorphisme, niveau 0)
Cliquez ici si vous souhaitez faire cet exercice.
Exercice 1 : Formes polymorphiques (niveau 1)
Il s'agit de manipuler quelques formes géométriques simples en leur associant une petite méthode qui affiche leur description.
1.1 Formes :
Dans un fichier formes.cc, définissez une classe Forme en la dotant de la méthode void description() qui affiche « Ceci est une forme ! » à l'écran.Ajoutez au programme une classe Cercle héritant de la classe Forme, et possédant la méthode void description() qui affiche « Ceci est un cercle. » à l'écran.
Recopiez ensuite la fonction main suivante, et testez votre programme :
int main()
{
Forme f;
Cercle c;
f.description();
c.description();
return 0;
}
Ajoutez maintenant ceci à la fin de la fonction main:
Forme f2(c); f2.description();
Testez ensuite à nouveau votre programme.
Voyez-vous vu la nuance ?
Pourquoi a-t-on ce fonctionnement ?
Continuons nos prospections...
Ajoutez encore au programme une fonction :
void affichageDesc(Forme& f)
qui affiche la description de la forme passée en argument en utilisant sa méthode description.
Finalement, modifiez le main ainsi :
int main()
{
Forme f;
Cercle c;
affichageDesc(f);
affichageDesc(c);
return 0;
}
Testez le programme... Le résultat vous semble-t-il satisfaisant ? Pourquoi?
Modifiez le programme (ajoutez 1 seul mot) pour que le résultat soit plus conforme à ce que l'on pourrait attendre.
1.2 Formes abstraites
Recopiez le programme précédent dans le fichier formesabstraites.cc, et modifiez la classe Forme de manière à en faire une classe abstraite en lui ajoutant la méthode virtuelle pure double aire().Écrivez également une classe Triangle et modifiez la classe Cercle existante héritant toutes deux de la classe Forme, et implémentant les méthodes aire() et description().
Vous l'aurez deviné, la classe Triangle aura comme attributs base et hauteur ainsi qu'un constructeur adéquat, et Cercle aura comme seul attribut rayon (ainsi qu'un constructeur adéquat).
Modifiez la fonction affichageDesc pour qu'elle affiche, en plus, l'aire de la forme passée en paramètre et testez avec la fonction main suivante :
int main()
{
Cercle c(5);
Triangle t(10, 2);
affichageDesc(t);
affichageDesc(c);
return 0;
}
Exercice 2 : encore des vaccins (niveau 1, polymorphisme)
Nous allons partir d'un code existant et y mettre un peu de polymorphisme.Partez du fichier fourni le vaccins.cc.
Vous allez maintenant y définir une classe Compagnie modélisant la compagnie pharmaceutique qui fabrique les vaccins. Cette classe sera caractérisée par :
- le nom de la compagnie (un string);
- son stock de vaccins (une collection hétérogène de Vaccins).
- un constructeur prenant en paramètre une chaîne de caractères pour initialiser le nom de la compagnie
- une méthode permettant d'ajouter un Vaccin au stock de vaccins de la compagnie
- une méthode permettant d'afficher l'ensemble de vaccins en stock
- une méthode permettant de calculer le coût de production de l'ensemble des vaccins du stock.
Attention : le calcul des coûts de production doit pouvoir se faire de façon polymorphique.
Complétez votre main avec :
- une instruction permettant de créer une Compagnie nommée "ICIBA" et ajoutant à son stock les vaccins v1, v2, v3 et v4;
- une instruction permettant d'afficher le stock de vaccins de la compagnie;
- les instructions permettant d'afficher le coût de production de l'ensemble du stock.
L'exécution devrait alors produire un affichage voisin de celui-ci :
test de la partie 4.1 Zamiflu volume/dose : 0.55 nombre de doses: 200000 mode de fabrication haute technologie Triphas volume/dose : 0.2 nombre de doses: 10000 mode de fabrication standard le cout deproduction de v1 et v2 est : 306500 test des parties suivantes ... le cout de production de v3 et v4 est : 16143.8 Coûts de production de l'ensemble du stock: Zamiflu volume/dose : 0.55 nombre de doses: 200000 mode de fabrication haute technologie Triphas volume/dose : 0.2 nombre de doses: 10000 mode de fabrication standard Zamiflu volume/dose : 0.55 nombre de doses: 15000 mode de fabrication haute technologie Triphas volume/dose : 0.2 nombre de doses: 15000 mode de fabrication standard le cout de production a été de : 322644
Projet : continuation
Cette semaine, vous continuez à coder l'étape 2 de l'énoncé du projet.