====== Partie I: Création d'une classe dérivée ======
[[in202:seance_2:td_2|TD complet]]
===== Question n° 1 =====
A partir de la classe ''MyCounter'' que vous avez développé la semaine, une nouvelle ''MyBiDiCounter''.
Cette classe doit ajouter deux méthodes à la classe de base :
* Une première méthode decrement qui décrémente le compteur, cette méthode correspond au pseudo-code suivant :
decrement()
si counter > 0
counter <- counter – 1
sinon
counter = max;
* Une seconde méthode print qui affiche l’état du compteur de la manière suivante.
print()
affiche "Compteur : " counter "/" max (retour à la ligne)
==== Question n° 1.1 ====
Ajouter les fonctions membres (méthodes) ''decrement()'' et ''print()''. Indiquer si ces méthodes modifient les champs de l'objet ou pas en ajoutant le qualificateur ''const''.
class MyCounter
{
protected:
int _counter;
int _max;
public:
MyCounter(): _counter(0), _max(0) {}
explicit MyCounter(int theMaxValue): _counter(0), _max(theMaxValue) {}
MyCounter(int theCounterValue, int theMaxValue):
_counter(0), _max(theMaxValue)
{}
MyCounter(const MyCounter& anotherCounter):
_counter(anotherCounter._counter),
_max(anotherCounter._max)
{}
int getCounter() const { return _counter; }
int getMax() const { return _max; }
void increment()
{
_counter = _counter < _max ? _counter + 1 : 0;
}
};
class MyBiDiCounter: public MyCounter
{
public:
void decrement()
{
_counter = _counter > 0 ? _counter -1 : _max;
}
void print()
{
std::cout << "(" << _counter << "/" << _max << ")" << std::endl;
}
};
==== Question n° 1.2 ====
Ajouter les constructeurs permettant de construire une classe ''MyBiDiCounter''.
En fait, il faut faire la distinction entre le constructeur par défaut. Dans ce cas, comme aucun constructeur n'est défini, C++ génère automatiquement le constructeur suivant :
** Indication **
class MyBiDiCounter: public MyCounter
{
...
public:
MyBiDiCounter(): public MyCounter() {}
...
};
De même, il génère automatiquement le constructeur de recopie :
class MyBiDiCounter: public MyCounter
{
...
public:
MyBiDiCounter(const MyBiDiCounter& aCounter): MyCounter(aCounter) {}
...
};
Si nous voulons utiliser les constructeurs de ''MyCounter(int)'' et ''MyCounter(int, int)'', il faut redéfinir des constructeurs ''MyBiCounter(int)'' et ''MyBiCounter(int, int)''.
===== Question n°2 =====
Tester votre nouveau compteur ''MyBiDiCounter'' en utilisant la fonction de test suivante.
void testMyBiDiCounter()
{
MyBiDiCounter counterA(0, 4)
counterA.print();
for(int i=0; i < 6; i++)
{
counterA.increment();
counterA.print();
}
for(int i=0; i < 6; i++)
{
counterA.decrement();
counterA.print();
}
}
[[.:part_ii|Deuxième partie]]
===== Ressources =====
==== Code présenté pendant le cours ====
{{https://perso.ensta-paris.fr/~bmonsuez/Media/code/in202/2021/td2/part1/part1.cpp|''part1.cpp''}} Fichier principal contient les fonctions de test et le main.
{{https://perso.ensta-paris.fr/~bmonsuez/Media/code/in202/2021/td2/part1/MyCounter.hpp|''MyCounter.hpp''}} Définition de la classe de base ''MyCounter''.
{{https://perso.ensta-paris.fr/~bmonsuez/Media/code/in202/2021/td2/part1/MyBiDiCounter.hpp|''MyBiDiCounter.hpp''}} Définition de la classe dérivée ''MyBiDiCounter''.
==== Liens vers les éléments syntaxiques C++ ====
[[cpp:syntax:class:deriving|Héritage & Dérivation de classe]]
[[cpp:syntax:class:deriving:methods|Champs & methodes dans les classes dérivées]]
[[cpp:syntax:functions:overload|La surcharge de fonctions en C++]]
===== Navigation =====
[[.:part_ii|Deuxième partie]]