Description
Ce programme de formation avancée en C++ s'adresse aux développeurs souhaitant approfondir leurs compétences techniques. Il couvre des thèmes essentiels tels que les évolutions du langage, la gestion efficace des ressources, la programmation orientée objet, ainsi que la programmation fonctionnelle et la métaprogrammation. Les participants apprendront à maîtriser les concepts modernes comme les move semantics, les exceptions avancées, et la gestion des threads. En outre, la formation inclut des aspects pratiques liés au DevOps, tels que les tests unitaires et l'automatisation des builds, permettant ainsi une approche complète du développement
Objectifs
- Maîtriser les mécanismes avancés de C++ Appréhender et mettre en oeuvre les techniques des nouvelles normes C++ Savoir pratiquer l'approche TDD (Test Driven Development) en C++Découvrir et maîtriser la programmation parallèle et synchronisée
Récapitulatif
Public
Développeurs C++
Prérequis
Avoir de bonnes bases en programmation C++
Ou avoir suivi la formation C++, programmation Objet
Méthodes et modalités pédagogiques
Formation réalisée en Présentiel, Distanciel ou Dual-Learning selon la formule retenue.
Moyens et supports pédagogiques
Mise à disposition d'un poste de travail sur nos formations en Présentiel.
Mise à disposition de nos environnements de visio sur nos formations en Distanciel
Remise d'une documentation pédagogique numérique pendant la formation
La formation est constituée d'apports théoriques, d'exercices pratiques et de réflexions
Dans le cas d'une formation sur site Entreprise, le client s'engage à avoir toutes les ressources pédagogiques nécessaires (salle, équipements, accès internet, TV ou Paperboard...) au bon déroulement de l'action de formation conformément aux prérequis indiqués dans le programme de formation
Modalités de suivi et d'évaluations
Auto-positionnement des stagiaires avant la formation
Émargement des stagiaires et formateur par 1/2 journée
Exercices de mise en pratique ou quiz de connaissances tout au long de la formation permettant de mesurer la progression des stagiaires
Auto-évaluation des acquis de la formation par les stagiaires
Questionnaire de satisfaction à chaud et à froid à l'issue de la formation
Programme détaillé
Évolutions du langage
- Concepts modernes du langage
- Gestion de la mémoire et alignement
- Inférence de types et déduction automatique
- Nouveaux spécificateurs de classe et contrôle de l'héritage
- Expressions constantes et évaluation à la compilation
- Gestion avancée du temps et espace de noms chrono
- Comparaisons avancées et opérateurs dédiés
Move semantics et gestion efficace des ressources
- Différence entre copie et déplacement
- std::move et références RValue
- Constructeurs de déplacement et opérateurs d'affectation par déplacement
- Interaction entre héritage et move semantics
- Optimisation des structures de données avec swap et move
- Mauvaises pratiques et pièges à éviter
Gestion avancée des ressources
- Resource Acquisition Is Initialization (RAII)
- Gestion de la mémoire avec unique_ptr, shared_ptr et weak_ptr
- Stratégies avancées de gestion mémoire et custom deleter
- Optimisation et allocation mémoire efficace
Gestion avancée des exceptions
- Hiérarchisation et conception des exceptions
- Gestion avancée des erreurs et robustesse du code
- Garanties de sécurité des exceptions
- Usage avancé de noexcept et impacts sur l'optimisation
Héritage et programmation orientée objet
- Gestion avancée de l'héritage : privé, protégé, multiple
- Héritage en diamant et héritage virtuel
- Résolution des ambiguïtés et dominance
- Interfaces et polymorphisme efficace
Programmation fonctionnelle en C++
- Utilisation avancée des lambdas et inline functions
- Gestion des abonnements et callbacks
- std::function, std::mem_fn et placeholders
- Perfect forwarding et std::forward
- decltype et inférence avancée des types
Templates, concepts et métaprogrammation
- Paramétrage avancé des templates
- SFINAE (Substitution Failure Is Not An Error) et pattern matching
- Variadic templates et passage d'arguments variable
- Métaprogrammation et Curiously Recursive Template Pattern (CRTP)
- Assertions statiques avec static_assert
- Extensions avancées avec friend et typage générique
- Contrats et concepts
Utilisation avancée de la librairie standard
- Collections modernes (std::array, unordered_map, unordered_set)
- Structures avancées (tuple, listes simplement chaînées)
- Itérateurs, adaptateurs d'itérateurs, Range
- Algorithmes ensemblistes et traitements optimisés
Multithreading et programmation concurrente
- Gestion avancée des threads et synchronisation
- std::call_once, this_thread, async et futures
- Mutexes, variables atomiques et gestion fine de la concurrence
- Stratégies de synchronisation et meilleures pratiques
DevOps
- TDD, approche et mise en place des tests unitaires
- Gestion des dépendances et automatisation des tests
- Frameworks et bonnes pratiques
- Profiling et performances
- Automatisation des Build
- Développement Cross-Platform