UdMHaut
UdMBAS

IFT1169
Programmation Avancée en C++

Département d'informatique et de recherche opérationnelle

Direction de l'enseignement de service en informatique
 

Image C++
 
Automne 2024

Accueil

Professeurs et
Démonstrateurs

Horaires et locaux

Notes de cours

Cours
après Cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Sessions antérieures

  Démonstration #5  
 
Dernière mise à jour : mercredi 11 septembre 2024 10:52:30
 


Solutionnaire

Buts:

  • [Surcharge des opérateurs].

  • Q1:Soit le programme suivant 1169demo05exo1.cpp

    • Donner les lignes de la fonction main où sont appelées les fonctions membres de la classe X, en indiquant à chaque fois le nom de l'objet crée (ou receveur). (Si plusieurs objets sont créés pour une même ligne, indiquez-les tous).

      ligne
      1
      ligne
      4
      ligne
      6
      ligne
      8
      ligne
      10
      ligne
      12
      X::X() O
      X::X(int) O O O
      X::X(const X&) O
      X::operator=(const X&) O O

    • Donner les résultats obtenus en sortie après l'appel des lignes suivantes, de la fonction main:

      ligne
      2
      ligne
      3
      ligne
      5
      ligne
      7
      ligne
      9
      ligne
      11
      ligne
      13
      Sortie 0 1985 0 1949 1985 1949 2010

    • Soit H le nom de l'objet crée à la ligne 4. Sur cette même ligne (4), H est accessible par le pointeur pa. Après avoir exécuté la ligne 10, et avant d'avoir exécuté la ligne 11:

      • H existe toujours mais n'est plus accessible? (vrai/faux)
        vrai: On a juste changé la valeur du pointeur, l'ex-objet, même si on perd sa trace, il existe toujours.

      • H existe et H.a a pris la valeur 2010? (vrai/faux)
        faux: on a perdu la trace de H! En plus la valeur "2010" n'arrive qu'à l'instruction 12, et on est entrain d'exécuter la 10e!

  • Q2 Le programme suivant 1169demo05exo2.cpp contient 5 erreurs de syntaxe. Indiquez les et indiquez la correction qu'il faudra apporter. Des erreurs sur une même ligne compte pour une seule erreur.

    [Solutionnaire](1169demo05exo2sol.cpp).

  • Q3 Complétez la classe Chaine suivante 1169demo05exo3.cpp.

    [Solutionnaire](1169demo05exo3sol.cpp).

  • Q4 Complétez la classe String suivante 1169demo05exo4.cpp.

    [Solutionnaire](1169demo05exo4sol.cpp).

  • Q5 Soit le fichier 1169demo05exo5.cpp.

    • À quoi servent les fonctions getX, getY, setX et setY?

    • [Réponse]: La méthode "get" permet d'afficher les valeurs privées de x et y en sortie. La méthode "set" permet de modifier ces valeurs.

    • A quoi servent les fonction membres Point(Point & p) et ~Point()? Sont-elles nécessaires dans le cas de la classe Point? Pourquoi?

    • [Réponse]: La méthode "Point(Point& P)" est le constructeur de recopie alors que "~Point()" représente le destructeur de la classe Point. Ils ne sont pas nécessaires, la classe ne contient pas de pointeurs.

    • Que signifie le mot clé friend devant le prototype de la fonction compareHauteur? À quoi cela sert-il?

    • [Réponse]: "friend" est un mot clé réservé en C++. Il permet de définir l'amitié en C++. Dans notre exemple, il permet à la méthode externe compareHauteur d'être amie de la classe Point et donc elle aura accès aux membres privés même si la méthode est externe.

    • On considère la classe Polygone suivante 1169demo05exo5p.cpp. (un polygone est caractérisé par son nombre de sommets et par ses sommets, stockés dans un tableau).

      On utilise la classe Point définie précédemment et l'on suppose que les deux classes sont définies dans un même fichier.

      Dites ce qui s'affiche à la suite des deux instructions suivantes :

      • Polygone triangle(3);
      • triangle.afficher();

      [Réponse]
      constructeur 1: 0,0
      constructeur 1: 0,0
      constructeur 1: 0,0
      (0,0)
      (0,0)
      (0,0)

    • Ecrivez la surcharge de l'opérateur d'indexation [ ] qui retourne le ième Point du polygone. Cet opérateur lèvera une exception du type entier qui renverra l'indice demandé quand celui-ci n'est pas valide (i.e. est négatif ou supérieur au nombre de sommets).

      [Réponse]

          Point& operator[] (int i) throw (int) {
              if (i>=0 && i<nb) return somt[i];
              else throw i;
          }
      

    • Définir la méthode input membre de la classe Polygone qui permet de mettre à jour les abscisses (X) et les ordonnées (Y) des différents sommets de ce polygone.

      [Réponse]

          void input(){
              float x,y;
              for (int i=0;i<nb;i++){
                  cout << "\n" << i \
      		<< "eme point, entre abscisse et ordonnee ";
                  cin >> x >> y;
                  somt[i].setX(x);somt[i].setY(y);
              }
          }
      

[top]


dift1169@iro.umontreal.ca