Le langage C++

Cette page donne quelques ressources pour le module de Prog2 de l’ENS Rennes. Si vous avez des questions, n’hésitez pas à contacter Martin Quinson ou Clément Courageux-Sudan.

Les prérequis du module sont une bonne compréhension du langage C (module d’ArcSys du premier semestre), une première exposition aux objets en Java (module Prog1 du premier semestre) et en python (semaine de projet de septembre passé), ainsi qu’une exposition à un langage fonctionnel comme CAML (Prog1 du premier semestre, cours en prépa). L’algorithmique est également supposée connue (Algo1 et Algo2 cette année).

Il était initialement prévu que nous couvrions à la fois le C++ et la programmation concurrente dans le cadre de ce module, mais c’est trop court. Un jour peut-être, le module sera un module entier de 40 heures (et non 20h comme cette année), ce qui laissera possible de couvrir les deux sujets.

Quelques ressources utiles

On trouve énormément de choses sur internet, et voici une petite sélection de ressources intéressantes portant sur le C++ moderne.

Chapitre 1: Better C

L’objectif de cette semaine est de présenter les améliorations de C++ par rapport au C, en se limitant aux aspects de programmation impérative. On parlera donc de std::string, des flux d’entrée/sortie, des références, de la bibliothèque standard (les conteneurs, les itérateurs et les algorithmes), et des templates de fonction.

Chapitre 2: Introduction à la POO

Cette semaine, on aborde le second paradigme de programmation utilisable en C++ : la programmation orientée objet. Nous parlerons d’encapsulation, de constructeurs, de const et static, de surcharge d’opérateurs et d’objets automatiques, temporaires ou dynamiques. Nous nous attacherons à comprendre comment ce paradigme peut aider à mieux organiser son code, en pratique.

Chapitre 3: Héritage de classes

On continue avec l’OOP en parlant d’héritage, de liaison dynamique, de compatibilité de classes, d’exceptions et de transtypage.

Chapitre 4: Mémoire en C++

Cette semaine, nous aurons deux mouvements inverses. Nous regarderons d’abord dessous pour comprendre comment C++ est implémenté. Nous ferons le lien avec ce que nous avions vu au semestre précédent sur le C. En particulier, nous chercherons à comprendre le layout mémoire des différentes constructions C++. Dans un second temps, nous étudierons les fonctionnalités “modernes” du C++ permettant de ne plus gérer à la main les ressources systèmes comme la mémoire. Éloigner le C++ du C de la sorte n’est pas forcément naturel, mais c’est nécessaire pour tirer le meilleur parti du langage.

Projet DeepDiep

Le but de ce projet est de réaliser un jeu de combat entre des petits robots, librement inspiré de diep.io. Il y aura de la programmation orientée objet, de l’algorithmique, un peu de réseau, un peu de graphisme et même un peu d’intelligence artificielle (mais sans deep learning, malgré le titre).

Semaine 5: Programmation fonctionnelle en C++

Cette semaine, nous verrons certains élément se programmation fonctionnelles ajoutés au C++ dans les dernières versions du langage. Au programme: lambdas et ordre supérieur, pureté et immutabilité, ranges et views. Nous parlerons aussi un peu de programmation générique et de templates si le temps le permet.

Examens des années passées

Le module est assez jeune et il n’y a pas beaucoup d’épreuves passées


Merci de signaler toute erreur sur framagit (vous devez être authentifié sur framagit pour cela).
Les collègues enseignants peuvent demander un accès “Guest” au projet (directement sur l’interface gitlab), pour accéder aux sources et corrigés (qui sont masqués surtout pour cacher les examens avant le jour J).