
- Durée
- 4 jours
- Niveau
- Avancé
- Modalités
- Présentiel / Distanciel
Description de la formation C++ Expert
Le C++ est un langage très technique et très riche. Il faut du temps pour le maîtriser car la syntaxe du C, conjuguée avec la mécanique des pointeurs mémoire, la programmation objet et les puissantes bibliothèques demandent une attention de tous les instants.
Cette formation C++ Programmation Avancée Expert vous permettra de maîtriser le langage C++, jusqu’à la version C++23.

Objectifs pédagogiques
Objectifs pédagogiques :
À l'issue de cette formation C++ Programmation Avancée Expert, vous aurez acquis les connaissances et compétences nécessaires pour :
- Maîtriser les meilleures pratiques concernant l’utilisation des classes
- Comprendre le besoin et les pièges des conversions (cast)
- Comprendre l’intérêt du Run-time type information (RTTI)
- Maîtriser l’utilisation des pointeurs (sur membres, smart pointers, etc.)
- Savoir mettre en œuvre les expressions lambdas
- Programmer efficacement les exceptions
- Savoir programmer et utiliser les templates et certains idiomes
- Savoir mettre en œuvre le multi-threading
- Gérer un objet qui se comporte comme une fonction (foncteur)
- Utiliser la puissance de la bibliothèque STL (Standard Template Library)
- Connaître les dernières nouveautés du C++20/23
Objectifs opérationnels
Savoir maîtriser le langage C++.
Programme
Contenu du cours, module par module
16 modules
- Forme canonique d'une classe
- Rôle du constructeur de copie
- Surcharge de l'opérateur d’affectation
- Constructeurs et allocation dynamique de mémoire
- Intérêt d'un destructeur virtuel
- Pièges à éviter
Travaux pratiques
- Syntaxe des pointeurs sur membres de classes
- Mise en œuvre
Travaux pratiques
- Comparaison héritages public, privé et protégé
- Héritages multiple et multiple répété
- Héritage virtuel et conséquences
- Principe de substitution de Liskov
Travaux pratiques
- Principe et cas d'utilisation
- Utilisation du dynamic_cast pour effectuer un downcast dans une hiérarchie de classes
- Utilisation de l'opérateur typeid et de la classe type_info
Travaux pratiques
- Présentation des conversions, syntaxe
- Utilisation du const_cast pour enlever un caractère const
- Utilisation du static_cast pour effectuer une conversion standard
- Utilisation du reinterpret_cast pour effectuer une conversion forte
- Utilisation du dynamic_cast dans une hiérarchie de classes
- Conversion via constructeurs ou l’opérateur de conversion
- Rôle du mot-clé explicit
Travaux pratiques
- Rappels sur les templates
- Avantages/inconvénients
- Instanciation implicite vs explicite
- Surcharge de fonctions templates
- Paramètres templates par défaut
- Spécialisation partielle ou totale des templates
- Assertions statiques avec static_assert
- Les variadic templates
- Les variables templates
- Les concepts et contraintes
Travaux pratiques
Mise en œuvre d'une classe template avec spécialisation complète
Mise en œuvre d'une classe template template avec spécialisation partielle
Mise en œuvre des variadic templates
Mise en œuvre des concepts et contraintes sur un template
- Analyse de quelques idiomes :Traits, Policy, SFINAE, CRTP
- Méta-programmation : comment exécuter à la compilation
- Les mot-clés constexpr et consteval
- Avantages/inconvénients
- Optimisations
Travaux pratiques
Mise en œuvre de la méta-programmation pour effectuer des calculs mathématiques par le compilateur
- Principe de la gestion RAII des ressources
- Danger des pointeurs bruts
- Intérêt des smart pointers
- Mise en œuvre de unique_ptr, shared_ptr, weak_ptr
- Utilisation de make_unique et make_shared
- Mise en œuvre d’un destructeur personnalisé
Travaux Pratiques (à titre indicatif)
- Principe du traitement des anomalies
- Utilisation des mots-clés try, catch et throw
- Traiter les exceptions sur place
- Propager les exceptions
- Lever une exception
- Créer ses propres classes d’exception
- Le mot-clé noexcept
- Échange d’exceptions entre threads avec std ::exception_ptr
Travaux Pratiques (à titre indicatif)
- Retour de type auto d’une fonction
- Rôle de decltype
- Principe du copy ellision avec RVO (Return Value Optimization)
- Utilisation d'adaptateurs de fonctions unaires et binaires
- Principe et intérêt des foncteurs
- Foncteurs prédéfinis dans la bibliothèque standard
Travaux pratiques
Mise en œuvre d'un foncteur avec l'algorithme for_each pour afficher le contenu d'un vector
- Les lambda-expressions : syntaxe, typage, utilisation
- La gestion des fermetures (closures) liées au contexte
- Les lambdas génériques
Travaux pratiques
Mise en œuvre d’expressions lambdas simples, puis génériques
- Comparaison lvalue/rvalue
- Rappels sur les références lvalue
- Utilité des adaptateurs de référence
- Définition des rvalue références
- Applications des rvalue références : move semantics et perfect forwarding
- Bonne utilisation de std::move et std::forward
- Les adaptateurs de référence std ::reference_wrapper
- Les signature reference qualifiers
Travaux pratiques
- Déclarer et exécuter un thread
- Cible d’un thread : fonction, foncteur, lambda
- Passage de paramètres à la cible d’un thread
- Détachement d’un thread
- Fonctions gérant le thread courant : yield , get_id , sleep_for, sleep_until
- Exclusion mutuelle : mutex, timed_mutex, shared_mutex, etc.
- Obtention d’un verrou avec : try_lock, lock
- RAII avec les mutex : lock_guard, unique_lock, shared_lock
- Exécution unique avec once_flag, call_once
- Les variables conditionnelles
- Futures/Asynchronisme : promise, packaged_task, future, shared_future, async, etc.
- Les objets de type std ::atomic
- Rôle des smart pointers atomic_shared_ptr et atomic_weak_ptr
- Le mot-clé thread_local
Travaux pratiques
Mise en œuvre de mutex pour éviter la corruption de données dans l’accès à une multimap
Utilisation de promise et future pour communication asynchrone entre threads
- Comparaison fonction/coroutine
- Mise en œuvre des opérateurs co_await, co_yield, co_return
- Rôle de std ::coroutine_handle
- Applications des coroutines
Travaux pratiques
- Les nouveaux itérateurs cbegin et cend
- Les tableaux à taille fixe avec std ::array
- Les nouvelles collections associatives : unordered_map et unordered_set
- Listes simplement chaînées
- Le conteneur tuple
- Adaptateurs d'itérateurs, stream itérateurs
- Les nouveaux algorithmes ensemblistes
Travaux pratiques
- Les modules et partitions
- L’opérateur de comparaison spaceship
- Initialisateurs désignés
- Exceptions statiques
- Pattern matching avec le mot-clé inspect
- Le nouvel espace de noms std ::views
- Le mot-clé constinit
Travaux pratiques
Travaux pratiques
Chaque chapitre donne lieu à des travaux pratiques qui permettent de comprendre les concepts et leurs mises en œuvre.
Programme mis à jour le 22/07/2026
Public concerné
Cette formation C++ s'adresse aux développeurs.

Prérequis
Une expérience de développeur en programmation C++ est essentielle pour tirer pleinement profit de cette formation. Avoir suivi la formation C++ Programmation objet en C++ (DPOC) ou posséder un niveau équivalent est un minimum.
J’évalue mes connaissances pour vérifier que je dispose des prérequis nécessaires pour profiter pleinement de cette formation en faisant le test de prérequis.
Faire le testFinancement
Cette formation peut être prise en charge par votre entreprise, seule ou avec l’appui de son opérateur de compétences. Nous fournissons le devis et les pièces attendues par l’OPCO.
4,7/5
11 avis
« Mon avis sur le contenu du stage : "Rien à redire si ce n'est qu'il y avait des exercices où je passais plus de temps à comprendre des aspects du C qui ne font pas partie du sujet (je n'étais pas à l'aise avec les tableaux de pointeurs et perdais plus de temps là dessus que sur le vrai sujet). Mais c'était rare (peut-être un exo sur 10)." Ce que j'ai le plus apprécié : "La salle à café avec les gourmandises. L'ordinateur installé pour pouvoir appliquer en pratique la théorie que l'on vient de voir." Ce que j'ai le moins apprécié : "L'éditeur requis pour les TP n'étaient pas installés au préalable. Donc un peu de temps perdu sur l'installation. " »
ROGER AlysonALTEN SA « Mon avis sur le contenu du stage: Niveau élevé, la formation de 1er niveau devrait être obligatoire en amont de celle-ci (ou évaluation des connaissances des participants en amont). Enfin un centre de formation compétent et intéressant, si j'ai de nouvelles formations à faire ou si je dois conseiller un lieu de formation, ce sera plb. Mon avis sur le formateur: Excellent formateur, intéressant et intéressé. Mon avis sur la salle de formation: RAS Ce que j'ai le plus apprécié: Nombre de participants Ce que j'ai le moins apprécié: RAS »
MD « Mon avis sur le contenu du stage: Le rythme de la formation est soutenu au vu du programme sur 4 jours. Un peu dur à suivre mais en tout cas cela donne de nombreuses pistes pour l'amélioration du développement C++. Mon avis sur le formateur: J'ai apprécié que le formateur ait adapté la formation en commun accord avec les stagiaires : certains chapitres de la formation ont été abrégé au profit d'autres chapitres. Très bien. »
LaurentSAGE
Les avis figurant ci-dessus sont issus des fiches d’évaluation que remplissent les participants à la fin de la formation. Ils sont ensuite publiés automatiquement si les personnes ont explicitement accepté que nous les diffusions.