Université Libre de Bruxelles							2007-2008
Faculté des Sciences Appliquées
Cours INFO-H-405
Prof. H. Bersini

Approfondissement de la programmation orientée objet
INFO-H-405 : TP2

C. Philemotte et H. Bersini.

Exercice 1 :
Les templates sont des patrons de programmations, et c'est pourquoi on parle de métaprogrammation. Ils sont interprétés lors de la compilation, comme le seraient les macros.

Connaissances nécessaires : template de fonction, template de classe, spécialisation de template

a)	Définissez le template de fonction qui permettra le calcul d'un maximum sur un tableau donné et ce quel que soit le type des données de ce tableau : template<class T> T max(T array[], int length).
b)	Spécialiser le template pour la classe Complex du TP 1.
c)	Définissez le template de classe template<class T> class List. Il s'agira d'une liste linéaire doublement liée.
d)	Transformez la fonction max en méthode qui se basera donc sur le paramètre de template T et cherchera le maximum dans la List.
e)	Définissez un classe SortedList qui hérite de List et où les éléments sont classés à leur insertion dans la liste selon l'opérateur de comparaison <. Peut on rendre une méthode virtuelle si elle est templatisée ou si elle utilise un paramètre de template de sa classe ? Qu'en est-il de la surcharge ? Quelle est donc la règle de résolution d'appel de méthode ou fonction templatisée ?
Exercice 2 :
Reprenez le Singleton du TP 1, et transformez le de tel manière à ce qu'il s'applique à n'importe quelle classe et ce grâce à un template.

Connaissances nécessaires : Design Pattern Singleton, template de classe
Exercice 3 :
Transformer la classe Complex du TP1 sous forme templatisée pour permettre le choix du type de réel utilisé (float, double ou long double).

Connaissances utilisées : template de classe

Exercice 4 :
On définit une classe Parallelogramme dont hérite les classes Losange et :Rectangle. On definit également une classe Carre qui hérite de Losange et Rectangle.  Arranger vous pour lever les ambiguïtés, et que le constructeur de la classe Parallelogramme ne soit appelé qu'une seule fois.

Connaissances utilisées : héritage multiple, dérivation virtuelle

Exercice 5 :
Reprenez l'Exercice 1. Rendez la List plus robuste en gérant les erreurs suivantes :
•	indice incorrect
•	objet non trouvé dans la liste
•	liste vide
Assurez-vous de rendre List exception-safe, cad que la gestion des erreurs assurent également un état déterministe de List.

Connaissances utilisées : système d'exception