Accueil > Formations > Développement et Ingénierie de Logiciels > Langages & Écosystèmes Backend > C++ Perfectionnement : conception avancée et design patterns
Formation C++ Perfectionnement : conception avancée et design patterns
Approfondissez les mécanismes avancés du C++ pour écrire un code moderne, robuste et performant.
Vue d'ensemble
- Pratique réelle du C++ : classes, héritage et polymorphisme, templates simples, conteneurs de la STL, exceptions
- Aisance avec les pointeurs et les références
- Avoir suivi la formation C++ ou posséder un niveau équivalent
Objectifs pédagogiques
Programme détaillé
Rappels ciblés et socle du C++ moderne
– Construction, initialisation et composition d’objets : durée de vie et classes de stockage
– Constance et `mutable` : garantir l’immuabilité logique d’un objet
– Contrôle d’accès, amitié et membres statiques : rappels ciblés sur l’encapsulation
– Écriture actuelle du langage : `auto`, boucle `for` sur intervalle, `nullptr`, `enum class` et initialisation uniforme
– Fonctions membres spéciales : `= default`, `= delete`, délégation de constructeurs, `override` et `final`
– Espaces de noms : organisation du code et résolution des noms
– Réécriture d’un code C++ « classique » en écriture actuelle et comparaison des deux versions
Gestion de la mémoire et des ressources
– Pointeurs et références : pièges courants (fuites, pointeurs pendants, débordements de tableaux)
– Forme canonique d’une classe : constructeur de copie, affectation, destructeur et règles de trois, cinq et zéro
– RAII et pointeurs intelligents : `unique_ptr`, `shared_ptr`, `weak_ptr`, `make_unique` / `make_shared` et destructeur personnalisé
– Références rvalue et sémantique de déplacement : constructeur et affectation par déplacement, `std::move`
– Transmission parfaite et élision de copie : `std::forward` et optimisation du retour de valeur (RVO)
– Détection des erreurs mémoire : sanitizers et Valgrind pour traquer fuites et accès invalides
– Remplacement des pointeurs bruts d’une application par des pointeurs intelligents
– Ajout du déplacement à une classe et mesure de son effet sur les performances
– Détection et correction d’une fuite mémoire à l’aide d’un sanitizer
Surcharge des opérateurs, foncteurs et lambdas
– Opérateurs binaires et unaires : arithmétique, comparaison, affectation, indexation `[]` et flux `<>`
– Incrément et décrément : formes préfixée et postfixée
– Opérateurs d’indirection `*` et `->` : proxies et pointeurs intelligents maison
– Foncteurs : objets fonctions, opérateur `()` et foncteurs de la bibliothèque standard
– Appelables : pointeurs de fonction, pointeurs sur membres et `std::function`
– Expressions lambda : syntaxe, modes de capture et lambdas génériques
– Création de foncteurs et d’un proxy d’accès à une ressource
– Remplacement de foncteurs existants par des lambdas
Conversions de types et RTTI
– Opérateurs de conversion et constructions implicites : contrôler les conversions avec `explicit`
– Opérateurs de cast : `const_cast`, `static_cast`, `reinterpret_cast`, rôle, usages légitimes et pièges
– `dynamic_cast` : contrôle du downcasting dans une hiérarchie polymorphe
– RTTI : identification du type à l’exécution avec `typeid` et `type_info`
– Choix du cast adapté sur une série de situations
– Mise en œuvre des idiomes « est-un » et « est-une-sorte-de » dans une hiérarchie
Héritage avancé et conception de hiérarchies
– Héritage ou composition : choisir la relation adaptée au besoin
– Héritage privé et protégé : réutiliser une implémentation, exportation de membres avec `using`
– Héritage multiple : collisions de membres et leur résolution
– Héritage en losange et héritage virtuel : partager une base commune
– Classes abstraites et interfaces : méthodes virtuelles pures et destructeur virtuel
– Principes de conception : substitution de Liskov, ouverture/fermeture et inversion des dépendances
– Conception de classes évolutives combinant héritage multiple, héritage privé et exportation de membres
– Refactorisation d’une hiérarchie qui ne respecte pas le principe de substitution de Liskov
Programmation générique : templates et idiomes
– Templates de fonctions et de classes : instanciation implicite et explicite, paramètres par défaut
– Spécialisation partielle et totale : adapter un template à des types particuliers, surcharge de templates
– Templates variadiques et `static_assert` : nombre variable de paramètres, vérifications à la compilation
– Concepts : contraindre les paramètres d’un template et obtenir des messages d’erreur lisibles
– Idiomes de la programmation générique : traits, policy et CRTP
– Méta-programmation et `constexpr` : déplacer des calculs à la compilation
– Développement d’une classe template avec spécialisation
– Calcul à la compilation avec `constexpr`
– Contrainte d’un composant générique par un concept
La bibliothèque standard (STL) en profondeur
– Conteneurs séquentiels, associatifs et non ordonnés : `array`, `vector`, `list`, `forward_list`, `map`, `unordered_map`, critères de choix et complexité
– Itérateurs et adaptateurs : catégories d’itérateurs, adaptateurs de conteneurs et d’itérateurs
– Algorithmes : non mutants, mutants, tri et numériques, paramétrés par des lambdas
– Chaînes et flux : `string`, flux de fichiers et flux en mémoire
– Types utilitaires : `pair`, `tuple`, `optional` et `variant`
– Implémentation des relations d’une étude de cas avec les conteneurs de la STL
– Comparaison de plusieurs conteneurs pour un même besoin et choix argumenté
Exceptions et robustesse du code
– Traitement des erreurs : `try`, `throw`, `catch` et ses variantes, traitement sur place ou propagation
– Hiérarchie des exceptions standard et classes d’exception applicatives
– Remontée de la pile et RAII : destruction des objets lors de la propagation d’une exception
– Garanties d’exception : garantie de base, garantie forte et `noexcept`
– Erreurs non traitées et transmission : `std::terminate` et `exception_ptr`
– Bonnes pratiques : C++ Core Guidelines et analyse statique du code
– Traitement d’un fichier avec gestion sur place puis propagation des exceptions
– Mise en œuvre de la garantie forte sur une classe (idiome copy-and-swap)
Introduction à la programmation concurrente
– Threads : `std::thread`, lancement, passage de paramètres, `join` et `detach`
– Exclusion mutuelle : `mutex`, `lock_guard` et `unique_lock`
– Variables conditionnelles : synchroniser producteurs et consommateurs
– Tâches asynchrones : `async`, `future` et `promise`
– Variables atomiques et `thread_local` : partager ou isoler des données entre threads
– Parallélisation d’un calcul sur plusieurs threads
– Protection d’une structure de données partagée entre threads
Prochaines sessions
du 3 nov. 2026 au 6 nov. 2026 • 4 jours
du 7 déc. 2026 au 10 déc. 2026 • 4 jours
du 12 avr. 2027 au 15 avr. 2027 • 4 jours
du 12 avr. 2027 au 15 avr. 2027 • 4 jours
du 12 avr. 2027 au 15 avr. 2027 • 4 jours
du 19 juil. 2027 au 22 juil. 2027 • 4 jours
du 19 juil. 2027 au 22 juil. 2027 • 4 jours
du 19 juil. 2027 au 22 juil. 2027 • 4 jours
du 19 juil. 2027 au 22 juil. 2027 • 4 jours
du 7 déc. 2027 au 10 déc. 2027 • 4 jours
du 7 déc. 2027 au 10 déc. 2027 • 4 jours
du 7 déc. 2027 au 10 déc. 2027 • 4 jours
du 7 déc. 2027 au 10 déc. 2027 • 4 jours
Ils nous font confiance
Cette année notre filière Langages & Écosystèmes Backend a accompagné plus de 10 entreprises dont :
Avis des participants
La formation est principalement basé sur la pratique. Ce qui permet de plus facilement comprendre les concepts. Le formateur est à l'écoute. Il prend en compte notre niveau et adapte les exemples suivant l'expérience qu'on a. Il répond à nos questions de manière concrète et…
La formation a très bien répondu à nos attentes. Le formateur est très compétent et sait rendre la formation dynamique est intéressante.
Très bonne alternance pratique/théorie qui fait que l'on ne s'ennuie pas et que l'on mets réellement en pratique ce que l'on apprends.
Très bonne formation, facile à suivre grâce à un très bon formateur, contenu de qualité. Malgré quelques problèmes techniques hors du contrôle du formateur ou des participants, la formation correspond 100% aux attentes et y répond.
Très satisfait de cette formation personnalisée avec toute mon équipe logicielle! Le formateur était très bien! Elle a dû se faire en visio bien que j'aurais grandement préféré en présentiel. 4 jours est un peu long mais on s'y fait le dernier jour! Rien à…
Votre formateur
Pascal B.
Formateur Java & C++
Pascal intervient sur des formations portant sur les langages et écosystèmes backend. Parmi les formations qui lui sont confiées figurent notamment « C# » et « C++ ». Son activité de formation remonte à 2006, soit plus de 20 ans d’expérience.
Financement
Cette formation est éligible aux financements OPCO et FNE-Formation. Nos équipes vous accompagnent dans le montage de votre dossier.
Questions fréquentes
Combien de temps dure la formation C++ Perfectionnement : conception avancée et design patterns ?
Cette formation se déroule sur 4 jours.
Quels sont les prérequis pour suivre la formation C++ Perfectionnement : conception avancée et design patterns ?
- Pratique réelle du C++ : classes, héritage et polymorphisme, templates simples, conteneurs de la STL, exceptions - Aisance avec les pointeurs et les références - Avoir suivi la formation C++ ou posséder un niveau équivalent
Quel est le prix de la formation C++ Perfectionnement : conception avancée et design patterns ?
En inter-entreprises, elle est à 2 600 € HT par participant ; en intra-entreprise, elle est à 6 600 € HT pour le groupe. Un tarif sur-mesure est également disponible sur devis.
La formation C++ Perfectionnement : conception avancée et design patterns délivre-t-elle une certification ?
Cette formation ne délivre pas de certification. Une attestation de fin de formation vous sera remise à l'issue de la session.
La formation C++ Perfectionnement : conception avancée et design patterns est-elle éligible à un financement OPCO ?
Oui, cette formation est éligible aux financements OPCO et FNE-Formation. Nos équipes vous accompagnent dans le montage de votre dossier.
Choisissez votre formation
Mon contact chez SPARKS est professionnel et très réactif. Les échanges sont simples, efficaces, et la collaboration se déroule dans d'excellentes conditions.
