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
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)