Formation : Programmation avancée en C++
L’objectif de la formation est de présenter les nouveautés du langage C++ ainsi que les concepts avancés du langage de programmation C++, la librairie C++ ANSI et notamment la STL (Standard Template Library), ainsi que les concepts de programmation les plus adaptés à C++, notamment la technique RAII.
L’environnement de développement utilisé sera Visual Studio ou Eclipse/CDT.
- Rappels sur les éléments fondamentaux
- Les standards C++ ISO 2011, 2014 et 2017
- Utilisation de la librairie C++ ANSI
- Les classes de flux
- La classe de manipulation de chaînes de caractères : string
- Copie d’objets en C++
- Problématiques soulevées
- Les solutions à cette problématique
- Introduction à RAII
- Les différentes classes de pointeurs intelligents proposées en C++ ISO
- Construction et destruction d’objets basés sur l’héritage
- Cycle de vie d’un objet
- Cascade des appels de constructeurs
- Cascade des appels de destructeurs
- Polymorphisme et modes de liaison de méthodes
- Liaison statique d’appel de méthodes
- Liaison dynamique d’appel de méthodes
- Définition du polymorphisme
- L’héritage induit le polymorphisme
- Modes de liaisons d’appels de méthodes
- La liaison statique (early binding)
- La liaison dynamique (late binding)
- Fonctionnement en interne de la liaison dynamique
- Le piège des destructeurs et les fuites mémoires
- Définition de méthodes et de classes abstraites
- Les méthodes abstraites
- Les classes abstraites
- L’héritage multiple
- Introduction au concept
- Problématiques soulevées
- L’héritage virtuel
- Les tables de pointeurs de méthodes à liaison dynamique
- Fonctionnement du compilateur
- Fonctionnement avec l’héritage multiple
- Identification dynamique de types
- L’opérateur typeid
- La métaclasse type_info
- Transtypage dynamique
- L’opérateur dynamic_cast
- Fonctionnement avec les types pointés
- Fonctionnement avec les types référencés
- Les autres opérateurs de transtypage (non liés au RTTI)
- L’opérateur const_cast
- L’opérateur static_cast
- L’opérateur reinterprete_cast
- Utilisation du RTTI dans la mise en œuvre d’un moteur de sérialisation
- Fonctionnement général de la sérialisation
- Sauvegarde d’un objet sur le flux
- Reconstruction des objets en mémoire
- Comparatif avec le moteur des MFC
- Aspects syntaxiques
- Intérêts des espaces de noms
- Mieux structurer vos codes
- Éviter les confits de nommage
- Localiser les fonctions du namespace global
- Le namespace std et C++ ANSI
- Qu’est-ce qu’une exception ?
- Types d’exceptions
- Définition d’une classe d’exception
- Les classes d’exceptions ANSI
- Déclenchement d’exceptions
- Attention au piège des constructeurs
- Modes de traitement d’une exception
- Capturer l’exception – instruction try … catch
- Relayer l’exception à la méthode appelante
- Cas subtils d’utilisations des exceptions
- Comment dépiler dans plusieurs contextes
- Contrôler l’exécution normale du programme
- Les exceptions prédéfinies de la librairie ANSI
- La classe
- L’en-tête
- Quelques autres classes d’exception
- Buts et intérêts de la généricité (factorisation de code)
- Les fonctions génériques
- Aspects syntaxiques
- Où localiser le code d’une fonction générique
- Pièges à éviter
- Définitions de classes génériques
- Aspects syntaxiques
- Implémentation des méthodes génériques
- Points subtils liés à la syntaxe des templates
- Concepts généraux
- Notions de conteneurs
- Notions d’itérateurs
- Les algorithmes des STL
- Notion de « functions objects »
- Manipulation de quelques conteneurs
- Utilisation des types vector et list
- Les paires et les tables associatives
- La STL et les streams
- Travaux pratiques : Utilisation des collections standards et des algorithmes associés
- Programmation multithreads (multitâches)
- Utilisation de lambda functions
- Utilisation du moteur de bind
Durée : 21h
Horaires : soirs / week-ends
Groupes de 5 à 10 personnes