PROGRAMMATION ORIENTEE OBJET AVANCEE EN C++ MODERNE
 

Ce document s'adresse à ceux qui connaissent déjà la programmation orientée objet et les bases du langage C++ et qui désirent approfondir leurs connaissances, en particulier concernant les nouveautés introduites à partir de la norme C++11 et qui ont amené à une nouvelle pratique du langage appelée communément C++ moderne.

Plusieurs documents peuvent être consultés préalablement, les deux premiers introduisent des fondamentaux, et le dernier est une collection de documents sur des notions plus avancées.

La première partie du document revient sur les fondamentaux du langage, notamment sur la programmation objet, la programmation générique avec les templates et la gestion des exceptions. Dans une seconde partie, la notion essentielle de "mouvement" du C++ moderne est abordée et son usage notamment par les pointeurs dits intelligents est présenté. Enfin, une troisième partie décrit des éléments de la bibliothèque standard, principalement la manipulation des structures de données et des algorithmes, avec un focus sur le concept d'expression lambda. Cette partie se termine par une introduction à la programmation parallèle avec les threads.

Voici un bref résumé de chacun des chapitres de ce document. Ils sont présentés sous la forme d'un diaporama qui, je l'espère, sera assez explicite.


  • Rappelle brièvement les bases du langage C++, tout d'abord la notion de référence et ensuite les concepts et la syntaxe liés à la programmation objet (classe, construction et destruction, héritage et polymorphisme, méthodes constantes, méthodes inline...). La surcharge des opérateurs est également abordée.


  • Détaille les mécanismes de conversion du C++ et l'usage des différents opérateurs associés, et présente le mécanisme RTTI (Run-Time Type Information).


  • Présente les principes et la syntaxe de la programmation générique avec les templates en C++, en rappelant les spécificités de la généricité dans ce langage, puis aborde des notions plus avancées comme les "concepts", la spécialisation statique (dont l'instanciation partielle) et les génériques à paramètres variables. Certaines notions non spécifiques à la généricité, comme l'amitié et la déclaration anticipée, sont également expliquées ici.


  • Rappelle le mécanisme et la syntaxe des exceptions en C++, et discute des garanties liées à la reprise du programme après une erreur, avec notamment l'exemple de l'idiome copy-and-swap.


  • Introduit la sémantique liée aux rvalues et lvalues du C++ moderne, avec un rappel de celle employée précédemment en C++03. La notion de mouvement, son intérêt et sa mise en oeuvre à l'aide d'opérateurs sont présentés.


  • Présente le mécanisme des pointeurs intelligents et illustre l'utilisation des trois principales catégories (pointeur unique, partagé et faible).


  • Décrit les principales structures de données et algorithmes de la bibliothèque standard, en détaillant certains concepts majeurs comme les itérateurs et les politiques (foncteurs et lambdas).


  • Introduit les notions fondamentales de la programmation parallèle par les threads, avec une présentation succincte de la couche bas niveau pour créer des threads et les synchroniser (mutex, variables de condition), et de la couche intermédiaire qui permet une abstraction des threads.