User Tools

Site Tools


in204:tds:sujets:td2:part5

This is an old revision of the document!


Partie V – Destructeurs

TD2

Question n°1

En partant du code des classes BaseCounter, ForwardCounter, BackwardCounter et BiDiCounter, ajouter à chacune de ses classes un destructeur qui affiche simplement le message « Destruction : » suivi du nom de la classe.

Correction

Correction

Il suffit d'ajouter pour chacune des classes un destructeur du type :

class ClassName
{
public:
    .... 
    ~ClassName()
    {
            std::cout << "Destruction: ClassName@" << this << std::endl
    }
};    

Ce qui nous donne les classes suivantes :

class ForwardCounter: public BaseCounter
{
    public:
        void increment()
        {
            if(counter < max)
                counter = counter + 1;
            else
                counter = 0;
        }
 
        ForwardCounter(): BaseCounter() {}
        ForwardCounter(const ForwardCounter& aCounter): BaseCounter(aCounter) {}
        explicit ForwardCounter(unsigned theMaxValue): ForwardCounter(0, theMaxValue) {}
        ForwardCounter(unsigned theCounter, unsigned theMaxValue): BaseCounter(theCounter, theMaxValue) {}
 
        ~ForwardCounter()
        {
            std::cout << "Destruction: ForwardCounter@" << this << std::endl
        }
};
 
class BackwardCounter: public BaseCounter
{
    public:
        void decrement()
        {
            if(counter > 0)
                counter = counter -1;
            else
                counter = max;
        }
        BackwardCounter(): BaseCounter() {}
        BackwardCounter(const BackwardCounter& aCounter): BaseCounter(aCounter) {}
        explicit BackwardCounter(unsigned theMaxValue): BackwardCounter(0, theMaxValue) {}
        BackwardCounter(unsigned theCounter, unsigned theMaxValue): BaseCounter(theCounter, theMaxValue) {}
 
        ~BackwardCounter()
        {
            std::cout << "Destruction: BackwardCounter@" << this << std::endl
        }
};
 
class BiDiCounter: public BaseCounter
{
    public:
        void increment()
        {
            if(counter < max)
                counter = counter + 1;
            else
                counter = 0;
        }
        void decrement()
        {
            if(counter > 0)
                counter = counter -1;
            else
                counter = max;
        }
 
        BiDiCounter(): BaseCounter() {}
        BiDiCounter(const BiDiCounter& aCounter): BaseCounter(aCounter) {}
        explicit BiDiCounter(unsigned theMaxValue): ForwardCounter(0, theMaxValue) {}
        BiDiCounter(unsigned theCounter, unsigned theMaxValue): BaseCounter(theCounter, theMaxValue) {}
 
        ~BiDiCounter()
        {
            std::cout << "Destruction: BiDiCounter @" << this << std::endl
        }
};
</hidden>
 
==== Question n°2 ====
 
Tester le fonctionnement du destructeur à partir de la fonction :
 
<code cpp>
void testFamilyOfCounters()
{
    ForwardCounter incCounter(0, 4);
    BackwardCounter decCounter(0, 3);
    BiDiCounter biDiCounter(0, 5);
    for(int i=0; i < 6; i++)
    {
        incCounter.increment();
        incCounter.print();
	decCounter.decrement();
        decCounter.print();
        biDiCounter.increment();
        biDiCounter.print();
    }
    for(int i=0; i < 6; i++)
    {
        biDiCounter.decrement();
        biDiCounter.print();
    }
}

TD2

in204/tds/sujets/td2/part5.1569957885.txt.gz · Last modified: 2019/10/01 19:24 by bmonsuez