Rappels
- Classes d'allocation mémoire. Construction, initialisation, embarquement d'objets. Constance.
- Amitié (friendship) C++ et contrôle d'accès. Destruction virtuelle. Gestion des exceptions.
Gestion des opérateurs
- Opérateurs binaires et unaires.
- Les foncteurs. L'opérateur d'indirection.
- Opérateurs d'incrément/décrément et d'autres opérateurs.
Travaux pratiques
Création de foncteurs et de proxies (libération mémoire, comptage de références) avec les opérateurs étudiés.
Conversion et RTTI
- Opérateurs de conversion. Constructions implicites, le mot-clé explicit.
- Les opérateurs de casting const_cast, static_cast, reinterpret_cast.
- Conversion dynamique et RTTI (Runtime Type Information).
- La structure type_info. L'opérateur dynamic_cast.
Travaux pratiques
Mise en oeuvre des idiomes " is-a " et " is-kind-of " avec dynamic_cast.
La généricité
- Introduction aux patrons de classe. Généricité et préprocesseur.
- Fonction générique. Classe générique. Composition générique. Généralisation générique.
- Introduction à la méta-programmation.
- La généricité, principe fédérateur des librairies STL et BOOST.
Travaux pratiques
Démarrage de l'étude de cas qui sera complétée avec la STL et BOOST. Mise en oeuvre de la composition et de la généralisation génériques. Création de plug-ins génériques.
La STL (Standard Template Library)
- Introduction. Les conteneurs séquentiels et associatifs : Définition, rôle et critères de choix.
- Le concept d'itérateur. Parcours d'un conteneur. La classe auto_ptr.
- Algorithmes STL et manipulation de conteneurs (manipulation, recherche de valeurs...).
- La STL et les traitements sur les flux (fichiers, mémoire, ..).
Travaux pratiques
Implémentation des relations avec les collections de la STL. Utilisation d'algorithmes standard quelconques.
BOOST
- Présentation de Boost. Les nouveaux conteneurs.
- Les pointeurs intelligents (smart pointers). La Pointer Container Library (destruction des données pointées d'un conteneur).
- Foncteurs, binders et lambda-expressions.
- Programmation événementielle (connexions et signaux). Introduction à la gestion des threads.
- Gestion des processus, mécanismes de communication interprocessus et mémoire partagée.
- Les structures de données (Tuple, Any, Variant).
Travaux pratiques
Mise en oeuvre de la robustesse avec les smart pointers de BOOST.
Utilisation avancée de l'héritage
- Héritage versus embarquement. Héritage privé. Héritage protégé.
- Exportation de membres cachés avec la clause using.
- Héritage multiple et gestion des collisions de membres.
- Héritage en diamant. Héritage virtuel et dynamic_cast.
Travaux pratiques
Combinaison de l'héritage multiple, privé et de l'exportation pour concevoir des classes robustes et hautement évolutives.