Développer en C++ 11/14/17
Description
Cette formation aborde de façon concrète les avancées des versions 11/14/17 de C++: lambdas, templates variadiques, threads, mécanisme de déplacement, ... Ces nouveautés permettent à C++ d'offrir des mécanismes analogues à ceux de ces concurrents tels que Java ou C#, et améliorent de façon très importante les codes produits.
Objectifs
A l'issue de cette formation, les participants seront en mesure de:
- Utiliser les améliorations syntaxiques introduites en C++11
- Ecrire des classes C++ de meilleure qualité basées sur les déclarations explicites
- Comprendre les nouveautés en matière de gestion des exceptions
- Maîtriser les concepts de déplacement et de pointeur intelligent
- Exploiter l'API normalisée de programmation multi-threadée
- Utiliser des templates variadiques
- Développer des lambda-expressions
Méthodes pédagogiques
Formation avec un minimum de 50% de travaux pratiques. La session alterne les présentations théoriques avec les exercices en groupe ou individuels. Des versions numériques de tous les documents sont remises aux participants (support de cours, énoncés, corrigés).
Participants
Développeur, concepteur ou chef de projet MOE connaissant C++.
Pré requis
- La pratique de C++ est indispensable pour suivre cette formation.
Programme
Les améliorations du langage
Ce module présente l'ensemble des améliorations destinées à rendre le code C++ plus lisible et maintenable.
- Les avancées des versions C++ 11, 14, 17 et 20
- Les améliorations des types: enum, unions, POD
- Le pointeur nullptr
- La boucle for sur intervalle
- L'inférence de type à la compilation avec auto
Mise en pratique: première mise en pratique avec auto et la nouvelle boucle for
Les nouveautés des classes C++
Ce module présente l'ensemble des améliorations destinées à rendre les classes C++ plus lisibles.
- L'initialisation des données membres
- La délégation des constructeurs
- La déclaration de redéfinition (override) et final
- Les mécanismes de conversions de types explicites
Mise en pratique: réalisation d'une arborescence de classes
Les exceptions
Ce mécanisme de gestion d'erreur subit de grosses évolutions.
- Les préconisations d'emploi des exceptions
- Le pointeur sur exception courante
- Les clauses throw et noexcept
Mise en pratique: réalisation d'un code employant la clause noexcept
Le mécanisme de déplacement
Présentation du mécanisme permettant d'optimiser la gestion mémoire et les performances.
- Introduction du concept de rvalue
- Le constructeur par déplacement et l'affectation par déplacement
- La forme normale d'une classe
- L'impact du principe de "move" au niveau de la STL
- Le bon usage du mécanisme de placement (emplace_back)
Mise en pratique: réalisation d'une classe dont les instances sont "move constructible" et "move assignable"
Les templates
Présentation des améliorations.
- Les templates variadiques
- La spécialisation partielle de templates
- Les arguments templates locaux et anonymes
Mise en pratique: utilisation de templates variadiques
Les lambda-expressions
La programmation fonctionnelle en C++.
- Le concept de programmation fonctionnelle
- La déclaration et l'appel d'une lambda-expression
- La capture du contexte englobant
- Les lambda-expression templates
Mise en pratique: programmation de différentes lambda-expressions avec paramètres et capture
Les pointeurs intelligents
Les mécanismes de gestion automatique des allocations/libérations.
- Le type shared_ptr et son fonctionnement (zone de contrôle)
- Les références faibles (weak_ptr)
- L'utilisation des smart pointers dans la STL
Mise en pratique: utilisation de shared_ptr
Les threads normalisés
La programmation multi-threadée en C++.
- Le fonctionnement et les états d'un thread
- Les techniques de lancement d'un thread (callable, async, future, promise, ...)
- Les sections critiques (mutex) et la synchronisation des threads (condition_variable)
- La gestion mémoire (volatile et types atomiques)
Mise en pratique: parallélisation d'un algorithme et analyse des performances, réalisation d'un producteur-consommateur (moniteur de Hoare).