Le présent document est un cours de C et de C++. Il s'adresse aux personnes qui ont déjà quelques notions de programmation dans un langage quelconque. Les connaissances requises ne sont pas très élevées cependant : il n'est pas nécessaire d'avoir fait de grands programmes pour lire ce document. Il suffit d'avoir vu ce qu'est un programme et compris les grands principes de la programmation.
Ce cours est structuré en deux grandes parties, traitant chacune un des aspects du C++. La première partie, contenant les chapitres 1 à 12, traite du langage C++ lui-même, de sa syntaxe et de ses principales fonctionnalités. La deuxième partie quant à elle se concentre sur la librairie standard C++, qui fournit un ensemble de fonctionnalités cohérentes et réutilisables par tous les programmeurs. La librairie standard C++ a également l'avantage d'utiliser les constructions les plus avancées du langage, et illustre donc parfaitement les notions qui auront été abordées dans la première partie. La description de la librairie standard s'étend du chapitre 13 au chapitre 18.
Si la librairie standard C++ est décrite en détail, il n'en va pas de même pour les fonctions de la librairie C. Vous ne trouverez donc pas dans ce cours la description des fonctions classiques du C, ni celle des fonctions les plus courantes de la norme POSIX. En effet, bien que présentes sur quasiment tous les systèmes d'exploitation, ces fonctions sont spécifiques à la norme POSIX et n'appartiennent pas au langage en soi. Seules les fonctions incontournables de la librairie C seront donc présentées ici. Si vous désirez plus de renseignements, reportez-vous à la documentation des environnements de développement, à l'aide des kits de développement des systèmes d'exploitation (SDK), et à la bibliographie.
Ce document a pour but de présenter le langage C++ tel qu'il est décrit par la norme ISO 14882 du langage C++. Cependant, bien que cette norme ait été publiée en 1999, le texte officiel n'est pas librement disponible. Comme je ne veux pas cautionner le fait qu'un texte de norme internationnal ne soit pas accessible à tous, je me suis rabattu sur le document du projet de normalisation du langage, datant du 2 décembre 1996 et intitulé Working Paper for Draft Proposed International Standard for Information Systems -- Programming Language C++. Je serai reconnaissant à quiconque pourrait me procurer le texte officiel de cette norme, afin que je puisse mettre en conformité ce cours.
Notez que les compilateurs qui respectent cette norme se comptent encore sur les doigts d'une main, et que les informations et exemples donnés ici peuvent ne pas s'avérer exacts avec certains produits. En particulier, certains exemples ne compileront pas avec les compilateurs les plus mauvais. Notez également que certaines constructions du langage n'ont pas la même signification avec tous les compilateurs, parce qu'elles ont été implémentées avant que la norme ne les spécifie complètement. Ces différences peuvent conduire à du code non portable, et ont été signalées à chaque fois dans ce document dans une note. Le fait que les exemples de ce cours ne fonctionnent pas avec de tels compilateurs ne peut donc pas être considéré comme une erreur de ce document, mais plutôt comme une non-conformité des outils utilisés, qui sera sans doute levée dans les versions ultérieures de ces produits.
Après avoir tenté de faire une présentation rigoureuse du sujet, j'ai décidé d'arranger ce document dans un ordre plus pédagogique. Il est à mon avis impossible de parler d'un sujet un tant soit peu vaste dans un ordre purement mathématique, c'est-à-dire un ordre où les notions sont introduites une à une, à partir des notions déjà connues (chaque fonction, opérateur, etc. n'apparaît pas avant sa définition dans le document). Un tel plan nécessiterait de couper le texte en morceaux qui ne sont plus thématiques. J'ai donc pris la décision de présenter les choses par ordre logique, et non par ordre de nécessité syntaxique.
Les conséquences de ce choix sont les suivantes :
il faut admettre certaines choses, quitte à les comprendre plus tard ;
il faut lire deux fois ce document. Lors de la première lecture, on voit l'essentiel, et lors de la deuxième lecture, on comprend les détails (de toutes manières, je félicite celui qui comprend toutes les subtilités du C++ du premier coup).
Enfin, ce document n'est pas une référence et contient certainement des erreurs. Toute remarque est donc la bienvenue. Je tâcherai de corriger les erreurs que l'on me signalera dans la mesure du possible, et d'apporter les modifications nécessaires si un point est obscur. En revanche, il est possible que les réclamations concernant la forme de ce document ne soient pas prises en compte, parce que j'ai des contraintes matérielles et logicielles que je ne peux pas éviter. En particulier, je maintiens ce document sous un unique format, et je m'efforce d'assurer la portabilité du document sur différents traitements de texte. Si vous prenez toutefois le temps de m'envoyer les remarques et les erreurs que vous avez pu détecter, je vous serais gré de vérifier au préalable qu'elles sont toujours d'actualité dans la dernière version de ce document, que vous pourrez trouver dans différents formats de fichiers sur mon site Web. Un historique des révisions a été inclus en première page afin d'identifier les différentes éditions de ce document.