Exercice langage C: la classe Compteur
Rédigé par GC Team, Publié le 17 Février 2012, Mise à jour le Lundi, 07 Novembre 2022 23:16![](/images/thumb/45/default.png)
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"
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
}