This shows you the differences between two versions of the page.
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° 1 ====== | + | Nous repartons du code de ''MyBiDiCounter'' tel défini à la fin de la question 1 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]] |