Cours C++ GIREF
Séance pratique #2.

Exercice 0.

Reprendre votre classe Heure.  Séparer la classe en 2 fichiers: .h et .cc.  Dans le .h, faire la déclaration de la classe.  Dans le .cc, faire la définition de la classe

Exercice 1.

Écrire 3 méthodes d'accès (requête) pour votre classe Heure pour donner accès à l'heure, aux minutes et aux secondes.  Voici la signature de ces méthodes:

        int reqHeure() const;
        int reqMinute() const;
        int reqSeconde() const;

Après avoir testé les méthodes, tenter de modifier un attribut de la classe dans l'une de vos méthodes const.  Observer l'erreur donnée par le compilateur.

Exercice 2.

Écrire un destructeur pour la classe Heure.  Faire un cout << "Destruction" << endl; dans la méthode.  Ensuite, ajouter un cout << "Construction" << endl; dans tous les constructeurs de votre classe.  Réexécuter le programme et observer.

Exercice 3.

Allouer dynamiquement un vecteur d'objets Heure (Heure *lVectHeure = new Heure[i]).  Ensuite, désallouer la mémoire avant la fin du main (delete [] lVectHeure).  Exécuter le programme et regarder les impressions qui sont faites à l'écran.

Une erreur classique est d'appeler l'opérateur "delete" au lieu du "delete []".  Changer l'appel du "delete []" par "delete" et réexécuter le programme.  Observer la différence... Y a-t-il une différence?

Exercice 4.

En plus de faire imprimer le message "Destruction" et "Construction" dans vos destructeurs et constructeurs, ajouter l'impression du pointeur this.  Exécuter le programme.

Ensuite, exécuter le programme dans ddd et suivre la trace de l'exécution en plaçant d'abord un Breakpoint à la 1re ligne du programme. Faire des Stepjusqu'à la construction des objets de la classe Heure.  Une fois dans un constructeur, vous pouvez faire Display -> Other -> "*this".  Regarder comment ddd affiche votre classe.

Exercice 5.

Nous avons vu dans le cours que les classes pouvaient garantir la validité de leurs données.  On a vu aussi que l'on pouvait "passer un contrat" avec ceux qui appellent nos méthodes.  Il existe une fonction C qui permet de faire arrêter le programme en cas d'erreur.  Cette fonction se nomme assert et prend en argument la condition à vérifier. Exemple :

    void Heure::asgnHeure(int pHeure, int pMinute, int pSeconde)
    {
    assert(pHeure >= 0 && pHeure < 24 && "Heure Invalide");
    ...
    }

Modifier les méthodes d'assignation (constructeur et autres) pour que le programme s'arrête en cas d'erreur. De plus, vous devez faire un #include <cassert> pour que le code compile correctement.