User Tools

Site Tools


in202:seance_2:td_2:part_iii

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
in202:seance_2:td_2:part_iii [2021/03/28 12:28]
bmonsuez created
in202:seance_2:td_2:part_iii [2022/11/18 10:45] (current)
Line 1: Line 1:
-====== Partie III : Méthodes ​virtuelles ​======+====== Partie III : Méthodes ​masquées ​======
  
-===== Question n° 1 ======+[[in202:​seance_2:​td_2|TD complet]]
  
-Ajouter à la classe ​''​BaseCounter'' ​deux nouvelles méthodes virtuelles pures ''​next()'',​ resp. ''​next(unsigned)''​. Ces deux méthodes purement virtuelles ont pour objet d’appeler les méthodes par défaut pour passer ​à la valeur suivante+Nous repartons du code de ''​MyBiDiCounter'' ​tel défini ​à la fin de la question 1 de la [[.:​part_i|première partie]].
  
-Typiquement,​ pour un compteur qui compte, ce seront les méthodes ''​increment()''​ et ''​increment(unsigned)''​. Pour un compte qui décompte, ce seront les méthodes ''​decrement()''​ et ''​decrement(unsigned)''​.+==== Question n°1 === 
  
-===== Question n° 2 ======+Ajouter à la classe ''​MyBiDiCounter''​ une nouvelle méthode :
  
-Ajouter aux classes ''​ForwardCounter''​ et ''​BackwardCounter'',​ deux nouvelles méthodes ''​next()'',​ resp. ''​next(unsigned)''​. Cette méthode ''​next()''​ (resp. ''​next(unsigned)''​) appellera la méthode ''​increment()'',​ (resp. ''​increment(unsigned)''​) pour la classe ''​ForwardCounter''​. cette méthode ''​next()'' ​(resp. ''​next(unsigned)''​) appellera la méthode ''​decrement()'',​ resp. ''​decrement(unsigned)''​ pour la classe ''​BackwardCounter''​.+<​code>​ 
 +increment(unsigned ​value) 
 +        counter = (counter + valuemod (max + 1) 
 +</​code>​
  
-===== Question n°3 ===== 
  
-Tester le comportement de vos compteurs à partir du code suivant+==== Question n°2 ====
  
 +Tester le bon fonctionnement de cette classe à partir du code suivant :
 <code cpp> <code cpp>
-void testFamilyOfCounters() +void testNewIncMethod() { 
-+    ​MyBiDiCounter bidiCounter1(0, 5); 
-    ​ForwardCounter incCounter(0, 4); +    for(unsigned ​i = 0; i <= 5; i++) 
-    BackwardCounter decCounter(0,​ 3); +
-    for(int i=0; i < 6; i++)+
     {     {
-        incCounter.next(); + bidiCounter1.increment(5); 
-        ​incCounter.print();​ +        ​bidiCounter1.print();
- decCounter.next();​ +
-        decCounter.print();+
     }     }
 } }
 </​code>​ </​code>​
 + 
 +==== Question n°3 ====
 +
 +Tester le code suivant.
 +
 +<code cpp>
 +
 +void testOldIncMethod() {
 +    MyBiDiCounter bidiCounter1(0,​ 5);
 +    for(unsigned i = 0; i <= 5; i++) 
 +    {
 +        bidiCounter1.increment();​
 +        bidiCounter1.print();​
 +    }
 +}
 +
 +</​code>​
 +
 +Expliquer pourquoi cela ne fonctionne pas ? Proposer une modification de l’appel pour que cela puisse fonctionner.
 +
 +
 +==== Question n°4 ====
 +
 +Modifier la classe ''​MyBiDiCounter''​ de manière à ce que les deux méthodes soient accessibles,​ à la fois la méthode ''​increment()''​ et la méthode ''​increment(unsigned)''​.
 +
 +Tester ensuite que le code initial de la fonction ''​testOldIncMethod()''​.
 +
 +
 +===== Ressources =====
 +
 +==== Code présenté pendant le cours ====
 +
 +{{https://​perso.ensta-paris.fr/​~bmonsuez/​Media/​code/​in202/​2021/​td2/​part3/​part2.cpp|''​part2.cpp''​}} Fichier principal contient les fonctions de test et le main.
 +
 +{{https://​perso.ensta-paris.fr/​~bmonsuez/​Media/​code/​in202/​2021/​td2/​part3/​MyCounter.hpp|''​MyCounter.hpp''​}} La classe de base ''​MyCounter''​ telle que définie à la fin de la question 2.
 +
 +{{https://​perso.ensta-paris.fr/​~bmonsuez/​Media/​code/​in202/​2021/​td2/​part3/​MyBiDiCounter.hpp|''​MyBiDiCounter.hpp''​}} Définition de la classe étendue ''​MyBiDiCounter''​.
 +
 +==== Liens vers les éléments syntaxiques C++ ====
 +
 +[[cpp:​syntax:​class:​deriving|Héritage & Dérivation de classe]]
 +
 +[[cpp:​syntax:​class:​deriving:​constructor|Contructeurs dans les classes dérivées]]
 +
 +[[cpp:​syntax:​class:​deriving:​methods|Méthodes dans les classes dérivées]]
 +
 +[[cpp:​syntax:​functions:​overload|Surcharges des fonctions en C++]]
  
 +===== Navigation =====
  
 +[[.:​part_ii|Deuxième partie]]
 +[[.:​part_iv|Quatrième partie]]
in202/seance_2/td_2/part_iii.1616934504.txt.gz · Last modified: 2021/03/28 12:28 by bmonsuez