===== Partie I – Création du compteur en C++ =====
[[in204:tds:sujets:td1|TD1]]
==== Etape 0 : Installation de l'environnement ====
En vous référant à la [[::in202::outils|documentation disponible]] sous ce lien et en n'hésitant pas à demander à l'enseignant de vous accompagner, installer un environnement de développement sur votre ordinateur.
==== Question n°1 ====
Créer un ensemble de fichier counter.cpp et conter.hpp pour définir votre classe de base « MyCounter ».
Au départ, seul le fichier ''counter.hpp'' contient le code suivant :
struct MyCounter
{
unsigned counter;
unsigned max;
unsigned getCounter() const {
return counter;
}
unsigned getMax() const {
return max;
}
void increment() {
counter ++;
if(counter > max)
counter = 0;
}
void reset() {
counter = 0;
}
void set(unsigned value) {
counter = (value <= max) ? value : counter;
}
void setMax(unsigned value) {
if(counter >= value)
counter = 0;
max = value;;
}
};
Le fichier ''counter.hpp'' contient a priori le code suivant :
#ifndef counterHPP
#define counterHPP
struct MyCounter
{
unsigned counter;
unsigned max;
unsigned getCounter() const {
return counter;
}
unsigned getMax() const {
return max;
}
void increment() {
counter ++;
if(counter > max)
counter = 0;
}
void reset() {
counter = 0;
}
void set(unsigned value) {
counter = (value <= max) ? value : counter;
}
void setMax(unsigned value) {
if(counter >= value)
counter = 0;
max = value;;
}
};
#endif
Le fichier ''counter.cpp'' soit ne contient rien, soit se limite à incluer le fichier ''counter.hpp'' comme suit:
#include"counter.hpp"
==== Question n°2 ====
Créer une fonction ''useObjectA()'' dans le fichier main.cpp reprenant le code présenté sur les transparents :
void useObjectA() {
MyCounter Counter1;
MyCounter Counter2;
Counter1.setMax(2);
Counter2.setMax(4);
Counter1.reset();
Counter2.reset();
for(unsigned i = 0; i <= 5; i++) {
std::cout
<< "Valeur des compteurs (" << Counter1.counter
<< ", " << Counter2.counter << ")" << std::endl;
Counter1.increment();
Counter2.increment();
}
}
==== Question n°3 ====
Vérifier que le code de ''useObjectA()'' fonctionne correctement.
Le fichier ''main.cpp'' doit corresponder au fichier suivant :
#include // Nécessaire pour std::cout
#include"counter.hpp"
void useObjectA() {
MyCounter Counter1;
MyCounter Counter2;
Counter1.setMax(2);
Counter2.setMax(4);
Counter1.reset();
Counter2.reset();
for(unsigned i = 0; i <= 5; i++) {
std::cout
<< "Valeur des compteurs (" << Counter1.counter
<< ", " << Counter2.counter << ")" << std::endl;
Counter1.increment();
Counter2.increment();
}
}
int main()
{
useObjectA();
return 0;
}
==== Question n°4 ====
Le code des fonctions membres a été écrit directement dans la ''struct MyCounter''.
Modifier le code pour séparer la déclaration des fonctions membres de leurs implantations.
Nous modifions les deux fichiers, le fichier ''counter.hpp'' et un fichier ''counter.cpp''.
Le fichier ''counter.hpp'' contient le code suivant :
#ifndef CounterHPP
#define CounterHPP
struct MyCounter
{
unsigned counter;
unsigned max;
unsigned getCounter();
unsigned getMax();
void increment();
void reset();
void set(unsigned value);
void setMax(unsigned value);
};
#endif
Le fichier ''counter.cpp'' contient le code suivant.
#include"counter.hpp"
unsigned MyCounter::getCounter() const
{
return counter;
}
unsigned MyCounter::getMax() const
{
return max;
}
void MyCounter::increment()
{
counter ++;
if(counter > max)
counter = 0;
}
void MyCounter::reset()
{
counter = 0;
}
void MyCounter::set(unsigned value)
{
counter = (value <= max) ? value : counter;
}
void MyCounter::setMax(unsigned value)
{
if(counter >= value)
counter = 0;
max = value;;
}