User Tools

Site Tools


in204:tds:sujets:td2:part4

This is an old revision of the document!


Partie IV – Redéfinition par masquage

TD2

Question n°1

Nous souhaitons redéfinir dans une classe MyAdvCounter qui dérive de la classe MyCounter une nouvelle méthode increment() en remplacement de la méthode actuelle dont le comportement est le suivant :

increment()
    si counter < max
        counter <- counter + 1
    sinon
        counter = max

Ie. le compteur ne revient pas à zéro et reste à max une fois la valeur max atteinte.

Correction

Correction

Il suffit de définir une classe similaire à la classe suivante :

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;
    }
};

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().

Question n°2

Tester le bon fonctionnement de la méthode à partir du code suivant et vérifier que le comportement est conforme

void testMyAdvCounter()
{
    MyAdvCounter incCounter(0, 4);
    for(int i=0; i < 6; i++)
    {
	  incCounter.increment();
        incCounter.print();
    }
}

Correction

Correction

Le compteur une fois la valeur 4 atteinte reste à la valeur 4.

Question n°3

Nous créons la fonction suivante :

void testCounter(MyCounter& unCompteur)
{
    for(int i=0; i < 6; i++)
    {
        unCompteur.increment();
        unCompteur.print();
    }
}

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.

in204/tds/sujets/td2/part4.1569958770.txt.gz · Last modified: 2019/10/01 19:39 by bmonsuez