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 #2  
 
Dernière mise à jour : mercredi 11 septembre 2024 10:52:30
 


Solutionnaire


Buts:

  • [RTTI], [Namespace].

RTTI

  • Q1: Répondre aux différentes questions incluses dans le programme suivant: (1169demo02exo1.cpp). Essayez de trouver la réponse sans vous aider de votre compilateur!

    [Solutionnaire](1169demo02exo1sol.cpp).

  • Q2 Que va afficher en sortie le programme suivant: (1169demo02exo2.cpp). Essayez de trouver la réponse sans vous aider de votre compilateur!

    [Solutionnaire](1169demo02exo2sol.cpp).


Namespace

  • Q3: Examiner le contenu du fichier (1169demo02exo3.cpp) puis compiler le.

    [Solutionnaire](1169demo02exo3sol.cpp).

    • a. Vous constaterez après la phase de compilation que le compilateur g++ a signalé une série de "warnings" ou "avertissements", corriger les puis exécuter le programme.

    • b. Vous allez remarquer des erreurs à l'exécution. Ces erreurs n'ont pas été détectées par le compilateur car ce sont des erreurs algorithmiques non liées au langage de programmation. Chercher ces erreurs et corriger les.

  • Q4: Indiquez si les fragments de code suivants génèrent au moins une erreur à la compilation. Si c'est le cas expliquez la, dans le cas contraire indiquez ce qui sera affiché en sortie.

    • a.
          namespace NS1 {
              class T {};
              void f(T x) {cout << "test1\n";}
          }
          using namespace NS1;
          NS1::T param;
          int main() {
              f(param);
              return 0;
          }
      

      • compil+exec ok. Affichage en sortie: test1

    • b.
          namespace NS2 {
              class T {};
              void f(T x) {cout << "test1\n";}
          }
          using namespace NS2;
          void f(NS2::T x){cout << "test2\n";}
          int main() {
              NS2::T param;
              f(param);
              return 0;
          }
      

      • ambiguïté à la compil. L'appel de f() dans la fonction main. La fonction f est définie dans NS2 et aussi comme une fonction "globale"!.

  • Q5: Soit le fragment de code suivant:
    
        namespace Noir {
            int j;
            void print(int);
            char ch;
        }
        namespace Blanc {
            int j;
            void print(int);
            double vision;
        }
        int j;
        void UneFonction() {
            using namespace Noir;
            using namespace Blanc;
            j = 0;          // -1-
            print(5);       // -2-
            ch = 'a';       // -3-
            vision = 7.65;  // -4-
            int j = 10;     // -5-
            ::j = 5;        // -6-
            Blanc::j = 5;   // -7-
            Noir::print(j); // -8-
        }
    

    Tout en justifiant votre réponse, dites si les appels -1- à -8- sont corrects ou pas ? (Chaque question est indépendante.)


    • -1- incorrecte: la variable j est locale à la fonction "UneFonction". Elle n'a pas été déclarée.
    • -2- incorrecte: ambiguïté. 2 fonctions "print" possibles: "Blanc::print" et "Noir::print".
    • -3- ok: "ch" de "Noir".
    • -4- ok: "vision" de "Blanc".
    • -5- ok: la variable "j" est locale à la fonction "UneFonction" aucune collision avec "j" de "Noir" et "j" de "Blanc".
    • -6- ok: "j" de l'espace globale. La aussi aucune collision (voir -5-).
    • -7- ok: appel direct de la variable "j" de "Blanc".
    • -8- ok: appel direct de la fonction "print" de "Noir".

[top]


dift1169@iro.umontreal.ca