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


Buts:

  • [Classes Génériques].

  • Q1: Soit le programme suivant 1169demo09exo1.cpp. Le compilateur va associer à chaque fonction appelée entre les lignes 0 et 5, une fonction classique ou une fonction instanciée à partir d'une fonction générique. Pour chaque ligne dites le nom de la fonction qui sera prise en considération et l'affichage en sortie obtenu suite à cet appel.

  • Q2: Soit la classe suivante 1169demo09exo2.h. Voici un fragment de code montrant comment est utilisée la classe IntList.


    // C est une liste ayant 6 éléments, chacun est initialisé à 2.
    IntList C(6,2);
    // le 3e élément vaut maintenant 4.
    C[2] = 4;

    Question -1- Modifier la classe IntList pour lui permettre de supporter un type d'objets T générique. Soit GenIntList<T> le nom de cette nouvelle classe.

    Question -2- Le constructeur de la classe IntList est comme suit:

    IntList::IntList(int n, int val) {
     assert(n > 0);
     taille = n;
     ptr = new int [n];
     for (int i = 0; i < n; ++i) {
      ptr[i] = val;
     }
    }

    Écrire le constructeur de la classe générique GenIntList.

    Question -3- Écrire l'instruction permettant d'instancier un objet maListe de classe GenIntList<T> ayant 8 éléments chacun initialisé avec la valeur 3.

    Question -4- Nous allons ajouter à la classe GenIntList l'opérateur de sortie operator<<. Ayant déjà pris connaissance de toutes les informations précédement fournies, est-ce que vous êtes dans l'obligation de déclarer cet opérateur ami de la classe GenIntList? Expliquer votre réponse.

  • Q3: Soit la classe générique (Template) suivante:

    template<class Type1, class Type2>
    class ClasseBase {

    protected:
      Type1 Champ1;
      Type2 Champ2;

    public:
      ClasseBase() {}
      ClasseBase(Type1 arg1, Type2 arg2):Champ1(arg1), Champ2(arg2) {}
      void Print() {
        cout << Champ1 << ' ' << Champ2 << endl;
      }
    };

    Citez au moins un type qu'il ne pourra pas être traité correctement par la classe ClasseBase (justifiez votre réponse).

  • Q4: Reprendre l'exercice précédent, et répondez aux questions suivantes:
    • -1- Écrire la définition d'une classe dérivée ClasseDerivee, qui dérive publiquement de la classe de base ClasseBase et qui contient les membres suivants:
      • - un membre donnée Champ3 du type Type2
      • - un seul constructeur
      • - une fonction Print() pour afficher les membres données de la classe de base et de la classe dérivée.
    • -2- Complétez la fonction main suivante:

      int main() {
        int x = 40;
        float y = 55.55;
        char a = 'w', b='z';

        // À titre d'exemple
        // création (instantiation) de l'objet BaseExpObj
        // du type ClasseBase et cela sans arguments.

        ClasseBase<int,int> BaseExpObj();

        // À ÉCRIRE
        // création (instantiation) de l'objet ObjBase
        // du type ClasseBase avec les valeurs x et y
        // comme arguments.

        // À ÉCRIRE
        // création (instantiation) de l'objet ObjDerivee
        // du type ClasseDerivee, avec les valeurs a,b
        // comme arguments.

        // À ÉCRIRE
        // appel de la fonction Print de la classe de base
        // sur l'objet ObjBase.

        // À ÉCRIRE
        // appel de la fonction Print de la classe dérivée
        // sur l'objet ObjDerivee

        return 0;
      }


[top]


dift1169@iro.umontreal.ca