Formation C++ Programmation Avancée Expert

4.7 sur 5 étoiles

5 étoiles
70%
4 étoiles
30%
3 étoiles
0%
2 étoiles
0%
1 étoile
0%
Voir les 10 avis
(10 avis)
Durée 4 jours
Niveau Avancé
Classe à distance
Possible

Vous pouvez suivre cette formation en direct depuis votre domicile ou votre lieu de travail. Plus d'informations sur notre solution de classe à distance...

Référence DCPA
Éligible CPF Non

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

Objectif pédagogique : 

Savoir maîtriser le langage C++.

Objectifs pédagogiques : 

Cette formation C++ Programmation Avancée Expert vous donne 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

Public :

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.

Rappels sur les classes en C++

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 :Exécution d'exemples pédagogiques illustrant les concepts présentés

Les pointeurs sur membres de classes

Syntaxe des pointeurs sur membres de classes
Mise en œuvre
Travaux Pratiques :Utilisation de pointeurs sur méthodes pour effectuer des calculs mathématiques

Utilisation avancée de l’héritage

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 :Mise en œuvre d’un héritage multiple répété avec polymorphisme

L’identification de type à l'exécution (RTTI)

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 :Mise en œuvre de RTTI pour effectuer un affichage spécifique d'un objet faisant partie d'une hiérarchie de classes

Les conversions en C++

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 :Choix du type de cast et mise en œuvre dans différentes situations

Les templates

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 fonction template avec surcharge et spécialisation
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

Les idiomes et la méta-programmation

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 chacun des 4 idiomes étudiés
Mise en œuvre de la méta-programmation pour effectuer des calculs mathématiques par le compilateur

Les pointeurs intelligents (smart pointers)

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)Mise en œuvre, dans une petite application, de la technique RAII par remplacement des pointeurs bruts par des pointeurs intelligents.

La gestion des exceptions

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)Calcul de la somme des soldes mensuels d’un compte bancaire par lecture d’un fichier CSV avec mise en œuvre d’un traitement sur place d’exceptions puis en propageant les exceptions à la fonction appelante

Les fonctions et foncteurs

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 du RVO dans une fonction
Mise en œuvre d'un foncteur avec l'algorithme for_each pour afficher le contenu d'un vector

La programmation fonctionnelle avec les expressions lambdas

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 des expressions lambda en remplacement des foncteurs
Mise en œuvre d’expressions lambdas simples, puis génériques

Utilisation des références rvalue

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 :Mise en œuvre des références rvalue pour la création et la copie d'objet par déplacement

Utilisation des threads

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 :Refactoring d’un programme de calcul en multi-threading pour améliorer les performances
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

Les coroutines

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 :Mise en œuvre d’un générateur de nombres avec une coroutine

Évolutions dans la bibliothèque STL

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 :Mise en œuvre de quelques conteneurs, d'algorithmes

Autres nouveautés de C++20/23

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 :Démonstration de ces nouveautés sur quelques exemples

Chaque chapitre donne lieu à des travaux pratiques qui permettent de comprendre les concepts et leurs mises en œuvre.

Date de mise à jour du programme : 13/12/2023

Dates et lieux

1
2
Du 27 au 30 mai 2024
Lieu
Distanciel
Durée
4 jrs
2360 € HT
Du 27 au 30 mai 2024
Lieu
Paris
Durée
4 jrs
2360 € HT
Du 25 au 28 juin 2024
Lieu
Distanciel
Durée
4 jrs
2360 € HT
Du 25 au 28 juin 2024
Lieu
Paris
Durée
4 jrs
2360 € HT
Du 27 au 30 août 2024
Lieu
Distanciel
Durée
4 jrs
2360 € HT
Du 27 au 30 août 2024
Lieu
Paris
Durée
4 jrs
2360 € HT
Du 23 au 26 septembre 2024
Lieu
Distanciel
Durée
4 jrs
2360 € HT
Du 23 au 26 septembre 2024
Lieu
Paris
Durée
4 jrs
2360 € HT
Du 28 au 31 octobre 2024
Lieu
Distanciel
Durée
4 jrs
2360 € HT
Du 28 au 31 octobre 2024
Lieu
Paris
Durée
4 jrs
2360 € HT
1
2

Logo partenaire action collective de l'OPCO Atlas Votre formation C++ prise en charge jusqu'à 100% des coûts pédagogiques ! *

Depuis 2011, Atlas (ex-Fafiec) a sélectionné PLB Consultant pour vous proposer les meilleures formations autour du développement objet avec .NET, Java et C++.
-  Sessions inter-entreprise sur Paris et Lille.
-  Sessions intra-entreprise sur toute la France.

* jusqu'à 100% des coûts pédagogiques selon votre branche d'activité dans la limite des fonds mutualisés dédiés aux actions collectives et en application des critères de prise en charge en vigueur (cf conditions détaillées sur le site d'Atlas)

Avis des participants à la formation C++ Programmation Avancée Expert

Note moyenne de 4.7/5(10)

Les avis figurant ci-dessous 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.

ROGER Alyson
5/5

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. "

MD
5/5
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
Benoit
4/5

Mon avis sur le contenu du stage :

"Quelques coquilles/manques dans le support de cours, mais qui ont été signalées par le formateur durant la formation."

Ce que j'ai le plus apprécié :

"- Proposition du formateur d'utiliser un autre IDE que celui de base - Adaptation du rythme de la formation à mon niveau et mes connaissance (le fait que je sois seul à y participer a du contribuer à ce point)"

PY
4/5

Mon avis sur le contenu du stage :

"Très bonne mise en pratique immédiate avec des TP appropriés."

Mon avis sur le formateur :

"L’animateur est disponible lors des TP."

Ce que j'ai le plus apprécié :

"Services cafés offerts Qualité des PC et des outils de travail : Visual C++."

Laurent
5/5
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.
Olaf
5/5

Mon avis sur le contenu du stage :

"les slides peuvent être légèrement améliorées notamment avec la coloration syntaxique, une police plus petite. Une fiche synthèse serait un plus."

Mon avis sur le formateur :

"Très bonne disponibilité et adaptation aux élèves."

BILQUART LEMERCIER Antoine
5/5

Mon avis sur le contenu du stage :

"Contenu très complet."

Ce que j'ai le plus apprécié :

"Ordinateur prêt pour la formation ! On peut attaquer directement avec les TP."

KA
5/5

Mon avis sur le contenu du stage :

"RAS"

Ce que j'ai le plus apprécié :

"Disponibilité café , politesse de l'accueil."

BC
4/5

Mon avis sur le contenu du stage :

"Contenu flexible en fonction de nos attentes ! ++"

Mon avis sur le formateur :

"attentif et disponible. ++"

PV
5/5


Formations Informatique
et Management
en ligne à ce jour

+
Stagiaires dans nos salles
de cours sur
l'année

%
De participants satisfaits
ou très satisfaits de nos
formations


Formateurs experts
validés par
PLB