C / C++ - Programmation avancée en C++

Référence : 18782-180523-7-DJA

Infos pratiques

  • Durée : 4 jours soit 28 heures
  • Population visée : Ouvrier – Employé – Employé qualifié – Cadre – Cadre supérieur
  • Public concerné : Toute personne souhaitant étudier les concepts du langage de programmation C++, la librairie C++ ANSI et notamment la STL, ainsi que les concepts de programmation les plus adaptés à C++, notamment la technique RAIL.

Programme

Objectifs pédagogiques

A l’issue de cette formation, l’apprenant sera capable de :

  • Coder des applications efficaces et sécurisées en termes de gestion de la mémoire via les techniques RAII ;
  • Utiliser la librairie standard proposée par le langage C++ ;
  • Mettre en œuvre une application multitâches.

Pré-requis

  • Pour pouvoir suivre cette formation, les stagiaires doivent obligatoirement maitriser les concepts de base de langage C++ : codage de classes, instanciation d’objets, manipulation de pointeurs, définition et utilisation de propriétés

Objectifs opérationnels et contenu de la formation

Rappels et mise à niveau des connaissances

  • Rappels sur les éléments fondamentaux
  • Les standards C++ ISO 2011, 2014 et 2017
  • Utilisation de la librairie C++ ANSI
  • Les classes de flux
  • La classe de manipulation de chaînes de caractères : string
  • Copie d'objets en C++
  • Problématiques soulevées
  • Les solutions à cette problématique
  • Travaux pratiques : Corrections de bugs relatifs à la copie d'objets

RAII et l'utilisation de pointeurs intelligents

  • Introduction à RAII
  • Travaux pratiques : Mise en œuvre d'une classe de pointeurs intelligents
  • Les différentes classes de pointeurs intelligents proposées en C++ ISO
  • Travaux pratiques : Utilisation des classes standards de pointeurs intelligents

L'héritage - aspects évolués

  • Construction et destruction d'objets basés sur l'héritage
  • Cycle de vie d'un objet
  • Cascade des appels de constructeurs
  • Cascade des appels de destructeurs
  • Polymorphisme et modes de liaison de méthodes
  • Liaison statique d'appel de méthodes
  • Liaison dynamique d'appel de méthodes
  • Définition du polymorphisme
  • L'héritage induit le polymorphisme
  • Modes de liaisons d'appels de méthodes
  • La liaison statique (early binding)
  • La liaison dynamique (late binding)
  • Fonctionnement en interne de la liaison dynamique
  • Le piège des destructeurs et les fuites mémoires
  • Définition de méthodes et de classes abstraites
  • Les méthodes abstraites
  • Les classes abstraites
  • Travaux pratiques : Développement d'une classe abstraite et de ses dérivées
  • L'héritage multiple
  • Introduction au concept
  • Problématiques soulevées
  • L'héritage virtuel
  • Travaux pratique : Utilisation de l'héritage multiple
  • Les tables de pointeurs de méthodes à liaison dynamique
  • Fonctionnement du compilateur
  • Fonctionnement avec l'héritage multiple
  • Mise en œuvre d'interfaces en C++

Le RTTI (RunTime Type Identification)

  • Identification dynamique de types
  • L'opérateur typeid
  • La métaclasse type_info
  • Transtypage dynamique
  • L'opérateur dynamic_cast
  • Fonctionnement avec les types pointés
  • Fonctionnement avec les types référencés
  • Les autres opérateurs de transtypage (non liés au RTTI)
  • L'opérateur const_cast
  • L'opérateur static_cast
  • L'opérateur reinterprete_cast
  • Utilisation du RTTI dans la mise en œuvre d'un moteur de sérialisation
  • Fonctionnement général de la sérialisation
  • Sauvegarde d'un objet sur le flux
  • Reconstruction des objets en mémoire
  • Comparatif avec le moteur des MFC
  • Travaux pratiques : Mise en œuvre d'un moteur de sérialisation

Les espaces de noms (namespace)

  • Aspects syntaxiques
  • Intérêts des espaces de noms
  • Mieux structurer vos codes
  • Éviter les confits de nommage
  • Localiser les fonctions du namespace global
  • Le namespace std et C++ ANSI
  • Travaux pratiques : Utilisation d'espaces de noms

Gestion des exceptions

  • Qu'est-ce qu'une exception ?
  • Types d'exceptions
  • Définition d'une classe d'exception
  • Les classes d'exceptions ANSI
  • Déclenchement d'exceptions
  • Attention au piège des constructeurs
  • Modes de traitement d'une exception
  • Capturer l'exception - instruction try ... catch
  • Relayer l'exception à la méthode appelante
  • Cas subtils d'utilisations des exceptions
  • Comment dépiler dans plusieurs contextes
  • Contrôler l'exécution normale du programme
  • Les exceptions prédéfinies de la librairie ANSI
  • La classe
  • L'en-tête
  • Quelques autres classes d'exception
  • Travaux pratiques : Utilisation des classes d'exceptions standards

Rappels sur la généricité (Les templates)

  • Buts et intérêts de la généricité (factorisation de code)
  • Les fonctions génériques
  • Aspects syntaxiques
  • Où localiser le code d'une fonction générique
  • Pièges à éviter
  • Définitions de classes génériques
  • Aspects syntaxiques
  • Implémentation des méthodes génériques
  • Points subtils liés à la syntaxe des templates
  • Travaux pratiques : Développement d'une classe générique

Utilisation de la STL (Standard Template Library)

  • Concepts généraux
  • Notions de conteneurs
  • Notions d'itérateurs
  • Les algorithmes des STL
  • Notion de " functions objects "
  • Manipulation de quelques conteneurs
  • Utilisation des types vector et list
  • Les paires et les tables associatives
  • La STL et les streams
  • Travaux pratiques : Utilisation des collections standards et des algorithmes associés

Aspects avancés

  • Programmation multithreads (multitâches)
  • Utilisation de lambda functions
  • Utilisation du moteur de bind
  • Travaux pratiques : Développement d'un programme multitâche

Méthodes et moyens

  • Explications théoriques suivies de pratiques guidées puis mises en autonomie
  • 1 vidéoprojecteur par salle
  • 1 ordinateur par stagiaire

Méthodes d’évaluation des acquis

  • Exercices de synthèse et d’évaluation
  • Evaluation de fin de stage

Profil formateur

Nos formateurs sont certifiés à l’issue d’un parcours organisé par nos soins. Ils bénéficient d’un suivi de compétences aussi bien au niveau technique que pédagogique.

Support stagiaire

  • Support papier ou électronique (dématérialisé)
  • Les exercices d’accompagnement peuvent être récupérés sur clef USB