Durée: 4 jours

Dates: du lundi 25 mars au jeudi 28 mars

Horaires: 9h30 - 17h30

Lieu: Inria Saclay - Bâtiment Turing - Salle Gilles Kahn

Intervenants: Sébastien Gilles, Vincent Rouvreau (SED Saclay) et Jérôme Diaz (M3DISIM)

Cette formation a pour but de donner de solides bases en C++ dans sa version la plus moderne (C++ 14/17 principalement avec quelques notions de C++20 - la formation sera prochainement mise à jour pour le présenter plus en détail, mais pour le moment nous sommes limités par le choix des notebooks Jupyter qui ne supportent pas ce standard). A l'issue de la formation l'objectif est de:

La formation peut être donnée en anglais ou en français selon les participants; le support est en anglais et si la formation est donnée en anglais il sera possible de poser des questions en français - le but est que la langue ne soit pas un obstacle.

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

Vous pouvez vous inscrire à la formation ici; merci de nous signaler en amont de la formation si vous vous êtes inscrits mais ne pouvez finalement pas y participer.

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.

Contenu de la formation:

  1. Programmation procédurale
    • Variables, initialisation, affectations
    • Conditions et boucles
    • Types prédéfinis
    • Fonctions
    • Allocation dynamique de la mémoire
    • Entrées et sorties
  2. Programmation objet
    • Introduction au concept de la programmation objet
    • Fonctions membres
    • Constructeurs (de base) et destructeur
    • Encapsulation
    • Attributs statiques
    • Héritage et polymorphisme
  3. 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
  4. 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
  5. 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
  6. 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