Toutes les missions
Le C++ « Modern Design »
4 jours selon disponibilités en Octobre
Presentiel à MONTMIRAIL (51210)
Informations
Lieu
Presentiel à MONTMIRAIL (51210)
Prérequis apprenants
bases en C++
Public ciblé
Développeurs C++
Chargés de développement d'applications informatiques
Chargés de développement d'applications informatiques
Informations sur les stagiaires
Chez le client
Les dates
4 jours selon disponibilités en Octobre
Le programme
Ce programme représente les attentes de notre client. Vous devez être en mesure de
traiter les chapitres listés ; vous restez libre d'adapter le contenu
de chaque chapitre et l'ordre dans lequel vous les traitez, selon votre approche et votre expérience.
Les objectifs de la formation
- Maîtriser les mécanismes avancés de C++ (héritage multiple / virtuel, programmation générique, méta-programmation, ...)
- Appréhender et mettre en oeuvre les spécificités des normes C++11/14/17/20 telles que les lambda expressions, la programmation fonctionnelle ou la notion de move semantics
- Savoir pratiquer l'approche TDD (Test Driven Development) en C++
- Découvrir et maîtriser la programmation parallèle et synchronisée introduite par C++
Le programme
1 - Nouveautés fondamentales du Core Language
- Le littéral nullptr et les types normalisés (uint_8, uint64_t, ...), les littéraux et séparateurs
- Inférence de types et de signatures avec auto
- Variables templates (C++ 14)
- Initialisation uniforme des variables, des tableaux et des conteneurs
- Parcours unifié des collections avec La boucle "range based" for
- Listes d’initialisation avec std::initializer_list
- Littéraux personnalisés
- Amélioration du contrôle de flux avec les Init-statements (C++17/20)
- L’opérateur sizeof appliqué aux membres d’un objet ou d’une classe
- Contrôle de l’alignement mémoire
- L'opérateur decltype
- Déconstruction avec les structured bindings (C++17)
- Les spécificateurs de classe (override, default, delete, final)
- Constructeur délégué et constructeur hérité
- Initialisation de membres
- Abraham’s Exception safety guarantees et la clause noexcept
- Données inline et data members statiques
- Métaprogrammation avec constexpr
- Les spécificateurs consteval et constinit (C++20)
- Les attributs (C++11/17/20)
- L’opérateur de comparaison « Three Way » <=> (C++20)
- Paramètres nommés pour la construction des structures (C++20)
- Améliorations apportées aux fonctions génériques et aux lambdas (C++17/20)
2 - Nouveautés de la librairie standard
- Les tableaux à taille fixe avec std ::array
- La classe std ::string_view (C++ 17)
- La classe std ::span (C++ 20)
- Nouveautés de la classe std ::string (C++20)
- Les classes std ::variant, std ::any et std::optional (C++17)
- Les nouvelles collections associatives : unordered_map/set et hash
- Le conteneur tuple
- Les nouveaux algorithmes ensemblistes
- Gestion du temps, l’espace de nom chrono
- Générateurs / distributions de nombre aléatoires
- La classe std::function, la fonction mem_fn
- Binding, placeholders et adaptateurs de références
- La librairie ranges, les vues et les adaptateurs de vues (C++20)
- Pipelining avec les nouveaux algorithmes sur vues (C++20)
- Sorties formattées avec std ::format et les placeholders (C++20)
- Constructeurs constexpr des conteneurs (C++20)
3 - Move semantics
- Copie versus transfert de propriété (déplacement)
- La fonction std::move
- Move constructor et move assignment operator
- Complétude étendue des classes
- Impact sur la librairie standard
- Signature reference qualifiers
- Perfect forwarding avec std::forward
- Références forward et collapsing
- Copy elision et Guaranted RVO (C++17)
4 - Gestion des ressources
- L’idiome RAII (Resource Acquisition Is Initialization)
- Propriété et transfert de responsabilité avec la classe std::unique_ptr
- Comptage de références avec la classe std::shared_ptr
- Implémentation d’un custom deleter
- Les fonctions std::make_unique et std::make_shared
- La classe std::weak_ptr et le référencement circulaire
5 - Utilisation avancée de la généricité
- Typage multiple avec les mixins
- Paramétrage et spécialisation des méthodes
- Héritage / containment et généricité
- Métaprogrammation
- L’idiome CRTP Curiously Recursive Template Pattern
- Typologie C++ et classes de traits
- Assertions statiques avec static_assert
- Extended friend declaration
- Les variadic templates, pattern matching et héritage multiple
- Constexpr_if (C++17)
- Implémentation générique du pattern visitor avec std ::visit (C++17)
- Définition de contrats génériques avec les concepts (C++20)
- Mise en oeuvre de contraintes avec requires (C++20)
- Concepts prédéfinis de la librairie standard (C++20)
6 - Les modules (C++20)
- Unités d’interface et d’implémentation
- Sous modules et partitions
- Module linkage
7 - Multithreading et concurrence
- Démarrage et détachement d’un thread
- La classe std::jthread (C++20)
- La classe std::call_once
- L’espace de noms this_thread
- Les futures, politique de démarrage (parallèle ou asynchrone)
- Partage de ressources et mécanismes de synchronisation : mutexes, latches, barriers et données atomiques (C++11/20)
- Flux de sortie synchronisés (C++ 20)