Table of Contents

Partie I – Création du compteur en C++

TD1

Etape 0 : Installation de l'environnement

En vous référant à la 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;;
    }
};

Correction

Correction

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.

Correction

Correction

Le fichier main.cpp doit corresponder au fichier suivant :

#include<iostream> // 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.

Correction

Correction

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