Programmation par Objets, TD 5: Programmation g´en´erique
Exercice 1. Que fait ce code
# i n c l u d e < i o s t r ea m >
t e m p l a t e<c l a s s X>
v o i d f (X x) {std::cout< <" Ici x = " < < x < < std::e n d l;}
t e m p l a t e< >
v o i d f (int x) {std::cout< <" L `a x = " < < x < < std::e n d l;}
int m a i n() {
int i = 2;
d o u b l e d = 3;
s h o r t s = 5;
f(i) ; f(d) ; f(s) ;
}
Exercice 2. Pile g´en´erique
a. Proposer l’impl´ementation d’une pile d’´el´ements d’un type g´en´erique.
Exercice 3. Matrices r´ecursives
On souhaite repr´esenter une matrice sous forme r´ecursive en utilisant la d´ecoupe en 4 blocs de dimensionn/2×n/2 (on supposera quenest une puissance de 2). La r´ecursion se termine pour les matrices 1×1 qui ne stockent qu’un seul coefficient.
a. proposer une impl´ementation, o`u l’ordre de la r´ecursion, un int, est un param`etre template
de la classe. On consid´erera que la matrice a pour coefficients des flottants double pr´ecision.
b. impl´ementer les op´erations d’addition et de produit pour ces matrices.
c. modifier votre impl´ementation pour que le type des coefficients soit aussi g´en´erique
Exercice 4. Tri
a. Ecrire un fonction faisant un tri par insertion sur un tableau d’´el´ements g´en´eriques. Cette fonction devra pendre en argument une classe-fonction Compare qui effectue la comparaison entre deux ´el´ements.
b. Proposer trois instanciations :
— pour un tableau d’entiers,
— pour un tableau de couples(string,int)en triant selon la valeur de l’entier.
— pour un tableau de string, en triant selon la longueur de la chaˆıne,
— pour un tableau de string, en triant selon l’ordre lexicographique
L3 Maths/info – TD de programmation par objets en C++ – Cl´ement Pernet Page 1/2
Exercice 5. Traits
On rappelle que pour le passage d’un argument en lecture seul `a une fonction, on peut utiliser un passage par valeur, ou par const r´ef´erence. Ce dernier a l’avantage de r´eduire la taille m´emoire r´ecopi´ee, mais g´en`ere une indirection.
On souhaite automatiser la d´ecision de passer un objet par valeur ou par const r´ef´erence selon sa taille : s’il d´epasse 16 octets, on le fera passer par const r´ef´erence.
a.Proposer une impl´ementation d’une telle classe. On pourra utiliser deux param`etres template : celui tu type inconnu et bool.
b. Montrer son utilisation avec par exemple une fonction Min appel´ee sur des int et sur des
std::string.
Exercice 6. Expressions symboliques
a. Impl´ementer les classes d´efinissant les expressions symboliques du TP 2 en utilisant la g´en´ericit´e en place du polymorphisme d’h´eritage
L3 Maths/info – TD de programmation par objets en C++ – Cl´ement Pernet Page 2/2