Exercice langage C: la classe Compteur

On souhaite implémenter une classe représentant un compteur entier. Un tel objet se caractérise par :

Une valeur entière, positive ou nulle, nulle à l'origine.

Le fait qu'il ne peut varier que par pas de 1 (incrémentation ou décrémentation). On convient qu'une décrémentation d'un compteur nul est sans effet.

Il s'agit de créer une classe Compteur pour rendre le service demandé. On écrira en outre un petit programme de test qui :

1. créera un compteur et affichera sa valeur;

2. l'incrémentera 10 fois, puis affichera à nouveau sa valeur;

3. le décrémentera 20 fois, puis affichera une troisième fois sa valeur

La sortie de ce programme doit donner (quelque chose comme) "0 10 0"


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Découverte et travail des classes. Utilisation d'un constructeur et d'un destructeur.

Fichier Compteur.h : déclaration de la classe Compteur
class Compteur {  protected:  /* i.e. visible des classes dérivées */
  int _valeur;  public:              /* i.e. l'interface de la classe */
  Compteur();                   /* le constructeur, invoque a la création */
  void incr();
  void decr();
  int valeur();                 /* permet un accès "read-only" a l'attribut */
};
Fichier Compteur.C : implémentation de la classe Compteur

#include 
#include "Compteur.h"

/*************************************************************/
Compteur :: Compteur() {
  _valeur = 0;
}

/*************************************************************/
void Compteur :: incr() {
  _valeur ++;
}

/*************************************************************/
void Compteur :: decr() {
  if (_valeur>0) _valeur--;
}

/*************************************************************/
int Compteur :: valeur() {
  return _valeur;
}

Fichier testCompteur.C : programme principal

#include 
#include "Compteur.h"

/*************************************************************/
int main () {

  Compteur c;                   // automatiquement égal a 0 par le constructeur

  cout  c.valeur()  endl;
  for (int i=0; i<10; i++)
    c.incr();
  cout  c.valeur()  endl;   // le compteur est passe à 10
  for (int i=0; i<20; i++)      // "i" est local au "for" !!!
    c.decr();
  cout  c.valeur()  endl;   // le compteur est redescendu à 0

  return 0;                     // pour l'OS
}