This is an old revision of the document!
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.
En fonction de l'environnement, essayer de créer un projet “console” et ensuite ajouter le code suivant dans ce projet.
Assurez vous que le projet compile et s'exécute correctement.
Créer un projet “console” vide dans votre environnement de développement.
Ajoutez un fichier Counter.h
ou Counter.hpp
ou Counter.hh
dans votre fichier et introduisez la structure de la classe Counter
dans ce fichier.
class MyCounter { public: unsigned counter; unsigned max; };
Ajoutez les fonctions membres à votre compteur :
class MyCounter { public: ... void increment() { counter ++; if(counter > max) counter = 0; } void reset() { counter = 0; } };
Expliquer ce que font ces fonctions membres.
Testez le code avec le programme main.cpp
suivant :
#include<iostream> #include "counter.hpp" int main() { MyCounter counterA; counterA.counter = 0; counterA.max = 2; MyCounter counterB; counterB.counter = 0; counterB.max = 4; for(int i = 0; i < 4; i++) { std::cout << "compteur A: (" << counterA.counter << ", " << counterA.max << ")" << std::endl; std::cout << "compteur B: (" << counterB.counter << ", " << counterB.max << ")" << std::endl; counterA.increment(); counterB.increment(); } return 0;
Expliquer le comportement des compteurs.
Nous voyons bien que les champs counter
, max
sont des champs qui ne devraient pas pouvoir être modifié accidentellement puisque cela modifie le comportement du compteur. Par exemple, le code suivant conduit à un comportement erratique :
int main() {
MyCounter counterA; counterA.counter = 0; counterA.max = 10;
for(int i = 0; i < 4; i++) { std::cout << "compteur A: (" << counterA.counter << ", " << counterA.max << ")" << std::endl; counterA.increment(); counterA.max -= 2; } return 0;
</code>
Dans ce cas, il faut rendre les champs uniquement accessible en lecture et non pas en lecture et écrire. Pour ce faire, il suffit de :
MyCounter
de struct
en class
.public
et une section private
:class MyCounter { private: ... // section privée public: ... // section publique };