This is an old revision of the document!
Partie III – Surcharge & Masquage
TD2
Nous repartons du code de MyBiDiCounter
tel défini à la fin de la question 1 de la partie II.
Question n°1
Ajouter à la classe MyBiDiCounter
une nouvelle méthode :
increment(unsigned value)
si counter + value <= max
counter <- counter + value
sinon
counter = (counter + value) mod max
class MyBiDiCounter: public MyCounter
{
public:
MyBiDiCounter(): MyCounter() {}
explicit MyBiDiCounter(unsigned theMax):
MyCounter(theMax)
{}
MyBiDiCounter(unsigned theCounter,
unsigned theMax): MyCounter(theCounter, theMax)
{}
MyBiDiCounter(const MyBiDiCounter& anotherCounter):
MyCounter(anotherCounter.counter)
{}
void decrement()
{
if(counter == 0)
counter = max;
else
counter --;
}
void increment(unsigned value)
{
if(counter + value < max)
counter += value;
else
counter = (counter + value) % max;
}
void print() const
{
std::cout << "Compteur: " << counter << "/" << max << std::endl;
}
};
Question n°2
Tester le bon fonctionnement de cette classe à partir du code suivant :
void testNewIncMethod() {
MyBiDiCounter bidiCounter1(0, 5);
for(unsigned i = 0; i <= 5; i++)
{
bidiCounter1.increment(5);
bidiCounter1.print();
}
}
Question n°3
Tester le code suivant.
void testOldIncMethod() {
MyBiDiCounter bidiCounter1(0, 5);
for(unsigned i = 0; i <= 5; i++)
{
bidiCounter1.increment();
bidiCounter1.print();
}
}
Expliquer pourquoi cela ne fonctionne pas ? Proposer une modification de l’appel pour que cela puisse fonctionner.
La nouvelle méthode increment(unsigned)
cache l'ensemble des méthodes increment“ définies dans la classe de base
MyCounter. Il faut dans ce cas ajouter à la classe :
<code cpp>
public:
using MyCounter::increment;
</code>
Ce qui nous donne la classe suivante :
<code cpp>
class MyBiDiCounter: public MyCounter
{
public:
MyBiDiCounter(): MyCounter() {}
explicit MyBiDiCounter(unsigned theMax):
MyCounter(theMax)
{}
MyBiDiCounter(unsigned theCounter,
unsigned theMax): MyCounter(theCounter, theMax)
{}
MyBiDiCounter(const MyBiDiCounter& anotherCounter):
MyCounter(anotherCounter.counter)
{}
void decrement()
{
if(counter == 0)
counter = max;
else
counter –;
}
using MyCounter::increment;
void increment(unsigned value)
{
if(counter + value < max)
counter += value;
else
counter = (counter + value) % max;
}
void print() const
{
std::cout « “Compteur: ” « counter « ”/“ « max « std::endl;
}
};
</code>
</hidden>
==== 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()''.
in204/tds/sujets/td2/part3.1569954770.txt.gz · Last modified: 2019/10/01 18:32 by bmonsuez