This shows you the differences between two versions of the page.
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 + value) mod (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]] |