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

Both sides previous revision Previous revision
Next revision
Previous revision
in202:seance_2:td_2:part_iii [2021/03/28 12:29]
bmonsuez [Question n°3]
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 ​======
  
 [[in202:​seance_2:​td_2|TD complet]] [[in202:​seance_2:​td_2|TD complet]]
  
-===== Question n° ======+Nous repartons du code de ''​MyBiDiCounter''​ tel défini à la fin de la question ​de la [[.:​part_i|première partie]].
  
-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. ​+==== Question n°1 === 
  
-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)''​.+Ajouter à la classe ​''​MyBiDiCounter'' ​une nouvelle méthode :
  
-===== Question n° 2 ======+<​code>​ 
 +increment(unsigned value) 
 +        counter ​(counter + value) mod (max + 1) 
 +</​code>​
  
-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''​. 
  
-===== Question ​n°3 =====+==== Question ​n°2 ====
  
-Tester le comportement ​de vos compteurs ​à partir du code suivant+Tester le bon fonctionnement ​de cette classe ​à partir du code suivant ​
 +<code cpp> 
 +void testNewIncMethod() { 
 +    MyBiDiCounter bidiCounter1(0,​ 5); 
 +    for(unsigned i = 0; i <= 5; i++)  
 +    { 
 + bidiCounter1.increment(5);​ 
 +        bidiCounter1.print();​ 
 +    } 
 +
 +</​code>​ 
 +  
 +==== Question n°3 ==== 
 + 
 +Tester le code suivant.
  
 <code cpp> <code cpp>
-void testFamilyOfCounters() + 
-+void testOldIncMethod() { 
-    ​ForwardCounter incCounter(0, 4); +    ​MyBiDiCounter bidiCounter1(0, 5); 
-    BackwardCounter decCounter(0,​ 3); +    for(unsigned ​i = 0; i <= 5; i++) 
-    for(int i=0; i < 6; i++)+
     {     {
-        ​incCounter.next(); +        ​bidiCounter1.increment(); 
-        ​incCounter.print();​ +        ​bidiCounter1.print();
- decCounter.next();​ +
-        decCounter.print();+
     }     }
 } }
 +
 </​code>​ </​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_ii|Deuxième partie]]
 +[[.:​part_iv|Quatrième partie]]
in202/seance_2/td_2/part_iii.1616934589.txt.gz · Last modified: 2021/03/28 12:29 by bmonsuez