User Tools

Site Tools


in204:tds:sujets:td2:part4

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
in204:tds:sujets:td2:part4 [2019/09/25 09:56]
bmonsuez
in204:tds:sujets:td2:part4 [2022/11/18 10:49] (current)
Line 16: Line 16:
  
 Ie. le compteur ne revient pas à zéro et reste à ''​max''​ une fois la valeur ''​max''​ atteinte. ​ Ie. le compteur ne revient pas à zéro et reste à ''​max''​ une fois la valeur ''​max''​ atteinte. ​
 +
 +<hidden Correction>​
 +
 +Il suffit de définir une classe similaire à la classe suivante :
 +
 +<code cpp>
 +class MyAdvCounter:​ public MyCounter
 +{
 +public:
 +    MyAdvCounter():​ MyCounter() {}
 +    explicit MyAdvCounter(unsigned theMax):
 +        MyCounter(theMax)
 +    {}
 +    MyAdvCounter(unsigned theCounter,
 +        unsigned theMax): MyCounter(theCounter,​ theMax)
 +    {}
 +    MyAdvCounter(const MyBiDiCounter&​ anotherCounter):​
 +        MyCounter(anotherCounter.counter)
 +    {}
 +
 +    void increment()
 +    {
 +        if(counter < max)
 +            counter ++;
 +    }
 +    void print() const
 +    {
 +        std::cout << "​Compteur:​ " << counter << "/"​ << max << std::endl;
 +    }
 +};
 +</​code>​
 +
 +La méthode ''​increment''​ va masquer la classe ''​MyCounter::​increment''​ dans la classe ''​MyAdvCounter''​. Cependant, la méthode ''​increment''​ reste présente, elle n'est pas remplacée, elle est simplement '​cachée'​ ou '​masquée'​. Il sera toujours possible de l'​appeller en préfixant le nom de la fonction ''​increment()''​ par ''​MyCounter::​increment()''​.
 +
 +</​hidden>​
  
 ==== Question n°2 === ==== Question n°2 ===
Line 34: Line 69:
 } }
 </​code>​ </​code>​
 +
 +<hidden Correction>​
 +
 +Le compteur une fois la valeur ''​4''​ atteinte reste à la valeur ''​4''​.
 +
 +</​hidden>​
  
 ==== Question n°3 ==== ==== Question n°3 ====
Line 52: Line 93:
  
 Tester la méthode en passant à la fonction ''​testCounter''​ un compteur de type ''​MyCounter''​ et un compteur de type ''​MyAdvCounter''​. Expliquer le comportement de la fonction pour chacun des types de compteur. Tester la méthode en passant à la fonction ''​testCounter''​ un compteur de type ''​MyCounter''​ et un compteur de type ''​MyAdvCounter''​. Expliquer le comportement de la fonction pour chacun des types de compteur.
 +
 +<hidden Correction>​
 +
 +
 +En fait, c'est la méthode ''​MyCounter::​increment''​ qui est appelé et non pas la méthode ''​MyAdvCounter::​increment''​. Pourquoi donc ?
 +
 +En fait, nous avons transformé un objet de type ''​MyAdvCounter''​ en objet ''​MyCounter''​. De ce fait, ce sont les méthodes visibles et accessibles par ''​MyCounter''​ qui sont appellées. En effet, les méthodes définies dans l'​objet ''​MyAdvCounter''​ ne sont pas visibles et accessibles dans ''​MyCounter'',​ elles sont situés en dehors de la définition de l'​objet. Donc même si l'​objet auquel je fais référence est un objet qui contient des extensions à l'​objet de type ''​MyCounter'',​ il n'est pas possible d'y accéder parce que mon horizon se limite uniquement aux définitions de ''​MyCounter''​.
 +
 +Ce comportement n'est pas sastisfaisant et nous souhaitons souvent de pouvoir remplacer la méthode définie dans la classe ''​MyCounter::​increment''​ par une nouvelle méthode qui prendrait la place de la méthode ''​MyCounter::​increment''​. Nous verrons cela au moment où nous nous intéresserons au polymorphisme.
 +
 +</​hidden>​
  
in204/tds/sujets/td2/part4.1569405392.txt.gz · Last modified: 2019/09/25 09:56 by bmonsuez