Jour 1
Les concepts de la Programmation objet essentiels pour bien commencer en C++
Les paradigmes de la P.O.O.
La classification
Contrôler l’accès aux données (encapsulation)
L'héritage, la dérivation
Fournir les informations essentielles (abstraction)Travaux pratiquesObjectifs : Valider que les concepts objets fondamentaux sont maîtrisés par tout le monde.
Présenter le modèle objet que l’on va utiliser en fil rouge dans la formation (il ne sera pas unique afin de bien comprendre les manipulations communes à toutes les classes et ce qui est spécifique à chacune)
Description : Quiz qui valide dans un premier temps que tout le monde dispose du vocabulaire objet, que ce vocabulaire est commun à tous participants et au formateur, mais aussi que tout le monde a compris en profondeur chaque concept.C++, le langage
Les types de données, les variables, les constantes, L’initialisation uniforme, Les opérateurs
Les structures de contrôles
Tableaux et chaînes de caractères
Les fonctions, paramètres par défaut et la surcharge
Les expressions lambdas, Les fonctions "inline"
Les pointeurs bruts, référence lvalue
Les structures et les types personnalisés, les énumérations
Les espaces de noms et l’organisation du code
Les compilations séparée et conditionnelleTravaux pratiquesObjectif : Valider que tout le monde est à l’aise avec son environnement de développement et prendre en main la syntaxe de base du C++ (opérateurs, types, tests, etc.).
Description : Réalisation du programme celcius.cpp qui demande la saisie au clavier d'une température en degrés Fahrenheit, puis calcule et affiche la température correspondante en degrés Celsius en interdisant les valeurs hors plage.
Création d’une expression lambda pour détection d’un palindrome.Les classes en C++
Définition d'une classe, Les qualificateurs "public" et "private"
Instanciation d’une classe
La surcharge de méthodes
Constructeurs par défaut, surchargés, de copie
Surcharge de l'opérateur d'affectation
Le destructeur
Le mot-clé this, les membres static
Les méthodes const, inline
Les fonctions amies
Surcharges d’opérateurs
L’allocation dynamique de mémoire
Les mots-clés default et delete
Le mot-clé final sur classes ou méthodesTravaux pratiquesObjectif : Maîtriser la création de classe, l’instanciation, les constructeurs et la surcharge des méthodes
Description : Création d’une classe « counter » permettant de créer un objet qui génère une séquence de nombres (incrémentation, valeur actuelle, affichage, etc.)
Surcharges du constructeur en y passant un nombre ou un objet (pour s’initialiser sur cet objet).Relations entre classe (association, composition, héritage)
Introduction aux diagrammes de classes UML2
Les associations entre classes : l’association directe, l'agrégation, la composition
Traduction en C++ d’une association, d’une composition
Importance de la liste d’initialisation dans les constructeurs
L'héritage public simple
Ordre d'exécution des constructeurs et destructeurs
Les règles de conversion
Le qualificateur d'accès protected
L'héritage multiple répété et ses difficultés de mise en œuvre
Manipulation d’objets dérivésTravaux pratiquesObjectif : Comprendre comment mettre en œuvre une association directe, puis une composition entre classes.
Savoir spécialiser une classe existante par héritage pour ne pas tout réécrire en maîtrisant l’impact hiérarchique dans la syntaxe (classe mère et descendance.)
Description : Mise en œuvre d'une relation d’association puis de composition entre deux classes. Construction d'une hiérarchie de classes à trois niveaux. Manipulation d'objets de ces classes. Mise en œuvre d'un héritage multiple répétéJour 3Le polymorphisme
Les méthodes virtuelles
Intérêt du polymorphisme
Mise en œuvre du polymorphisme
Les classes abstraites et les méthodes virtuelles pures
Les destructeurs virtuelsTravaux pratiquesObjectifs : Comprendre comment mettre en œuvre une association directe, puis une composition entre classes. Savoir spécialiser une classe existante par héritage pour ne pas tout réécrire en maîtrisant l’impact hiérarchique dans la syntaxe (classe mère et descendance.)
Description : Mise en œuvre du polymorphisme dans le Design Pattern Factory Method : obtenir un objet d’une sous-classe dans une hiérarchie de classes avec héritage multiple comportant une classe abstraite pure.La gestion des exceptions
Principe du traitement des anomalies
Utilisation des mot-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é noexceptTravaux pratiquesObjectif : Comprendre comment gérer les exceptions dans une application effectuant des entrées-sorties.
Description : 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.Jour 4Les templates en C++
Principe des templates, objectifs, avantages et limites
Déclaration de paramètres template
Templates de fonctions : syntaxe et surcharge
Templates de classes
Templates de méthodes
Instanciation des templates de fonctions, des templates de classes
Instanciation implicite vs instanciation explicite
Spécialisation complète ou partielle d’un templateTravaux pratiquesObjectif : Comprendre et mettre en œuvre la généricité des types dans une fonction grâce aux templates.
Description : Création d'un template de fonction (fonction rendant le « plus petit » de deux objets passés en argument indépendamment de leur type). Création d'un template de classe (tableau redimensionnable automatiquement).Les pointeurs intelligents (smart pointers C++11)
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 pratiquesObjectif : Comprendre la mise en œuvre des smart pointers pour la gestion des ressources
Description : Mise en œuvre, dans une petite application, de la technique RAII par remplacement des pointeurs bruts par des pointeurs intelligentsJour 5Outils de développement
Présentation des IDE courants
Options de compilation
Cross-compilateurs
Génération d’un exécutable, fichiers objets
Utilisation des fonctionnalités de debug
Commande make et cmake sous Linux
Utilisation de gitTravaux pratiquesObjectifs : Savoir débugger une application et modifier les options de compilation.
Savoir packager une application C++.
Description : Recherche de bugs dans une application et correction.
Mise en œuvre d’une chaîne de build automatisée.Aperçu de la librairie STL
Composants clés, documentation, philosophie d’usage
Les conteneurs et initializer_list
Les itérateurs et algorithmes STL
Gestion des entrées-sorties, (flux standard, manipulateurs, espace de nom chrono)Travaux pratiquesObjectifs : Comprendre l’intérêt d’un conteneur pour y stocker des objets et le rôle d’un itérateur. Savoir lire-écrire dans un fichier texte
Description : Lecture d’un fichier texte ligne par ligne, création des objets représentés par les chaînes de caractères, mise en œuvre d’un vector pour y stocker les objets et parcours à l’aide d’un itérateur pour supprimer certains objets, tri du vector à l’aide d’un algorithme de tri et d’un foncteurPrésentation des principales nouveautés apportées par C++11/14/17/20/24
Le mot-clé constexpr
Principe des références rvalue, rôle de std ::move
Intérêt de la move semantics
Les concepts et contraintes
Les modules et partitions
Les coroutines
Le nouvel opérateur de comparaison
Le mot-clé constevalTravaux pratiquesObjectif : Comprendre l’intérêt des références rvalue, des expressions lambdas.
Description : Ajout, dans une classe, d’un constructeur et d’un opérateur d’affectation par déplacement utilisation d’une expression lambda dans un algorithme de tri.