User Tools

Site Tools


in202:seance_1:td_1

This is an old revision of the document!


TD : Premiers pas avec C++

Première Partie :Installation d'un environnement C++

Etape 1 : 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.

Etape 2 : Compilation d'un exemple simple de classe C++

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.

Seconde partie : Création d'une classe "Compteur" en C++

Question 2.1 :

Créer un projet “console” vide dans votre environnement de développement.

Question 2.2 :

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

Question 2.3 :

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.

Question 2.4 :

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.

Troisième partie : Rendre publique/privée des champs et fonctions

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 :

  • rendre les champs privés (on doit transformer la déclaration de l'objet MyCounter de struct en class.
  • définir dans cette classe au moins une section public et une section private:
        class MyCounter
        {
            private:
              ... // section privée
            public:
              ... // section publique
        };
in202/seance_1/td_1.1616325604.txt.gz · Last modified: 2021/03/21 11:20 by bmonsuez