- 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]
|