Cette formation a pour but de donner de solides bases en C++ dans sa version la plus moderne (C++ 14/17 - le C++ 20 n'est pas encore abordé mais le sera dans une version future de cette formation). A l'issue de la formation l'objectif est de:
- Comprendre les mécanismes de base et la syntaxe du C++ 14/17.
- Connaître les différents paradigmes de programmation en C++.
- Connaître et être en mesure d'utiliser les fonctionnalités les plus courantes de la bibliothèque standard.
- Connaître nombre de bonnes pratiques de programmation C++.
La présentation est disponible ici et s'appuie sur les notebooks Jupyter avec le noyau Xeus-cling. Le README indique comment installer facilement Xeus-cling sur votre portable, qui sera indispensable car la formation alterne présentations et TP.
Pré-requis sur votre portable
Aucun pré-requis fort n'est requis: une version déployable sur BinderHub est disponible cette année.
Il est néanmoins conseillé de procéder à une installation locale de Xeus-cling (voir le README: le déploiement sur Binder prend quelques minutes).
Optionnellement, une image Docker est fournie au besoin pour les TP.
Inscriptions et format
Les inscriptions sont closes.
La formation est gratuite et accessible à tous. Il est possible de ne pas assister à une des sessions mais il faut avoir conscience qu'elles ne sont pas complètement indépendantes et suivent une progression logique.
En raison de la crise sanitaire, le format est modifié cette année:
- Vu la fatigue supplémentaire induite par la visio, les sessions ne seront pas sur des journées complètes.
- Les TP ne seront pas faits sur le temps des sessions. Les participants sont invités à les faire hors des sessions; la correction est donnée dans le repository git et les formateurs sont disponibles pour éclaircir tout point posant problème.
- La durée sur 5 demi-journées est purement indicative: il est possible que 4 suffisent.
Contenu de la formation:
- Programmation procédurale
- Variables, initialisation, affectations
- Conditions et boucles
- Types prédéfinis
- Fonctions
- Allocation dynamique de la mémoire
- Entrées et sorties
- Programmation objet
- Introduction au concept de la programmation objet
- Fonctions membres
- Constructeurs (de base) et destructeur
- Encapsulation
- Attributs statiques
- Héritage et polymorphisme
- Opérateurs
- Introduction au concept de surcharge d'opérateurs
- Opérateurs de comparaison
- Opérateurs de flux (entrée/sortie)
- Opérateur d'affectation et forme canonique d'une classe
- Foncteurs
- Templates
- Introduction au concept de template
- Spécialisation
- Les syntaxes spéciales: mots-clés typename, template et this obligatoire
- Métaprogrammation
- Tease pour des concepts plus avancés avec les templates
- Concepts utiles et librairie standard (STL)
- Gestion des erreurs
- Idiome RAII
- Conteneurs
- Conteneurs associatifs
- La "move semantics"
- Les smart pointers
- Les algorithmes de la STL
- C++ en environnement réel
- Mise en place d'un environnement minimal
- La structure des fichiers pour un programme C++
- Compilateurs
- Librairies tierces: comment les inclure sans récupérer leurs warnings de compilation
- Les namespace
- Outils divers