Le C++ est l'un des langages de programmation les plus utilisés actuellement. Il est
à la fois facile à utiliser et très efficace. Il souffre cependant de la réputation d'être compliqué
et illisible. Cette réputation est en partie justifiée. La complexité du langage est inévitable
lorsqu'on cherche à avoir beaucoup de fonctionnalités. En revanche, en ce qui concerne la lisibilité
des programmes, tout dépend de la bonne volonté du programmeur.
Les caractéristiques du C++ en font un langage idéal pour certains types de projets.
Il est incontournable dans la réalisation des grands programmes. Les optimisations des compilateurs
actuels en font également un langage de prédilection pour ceux qui recherchent les performances. Enfin,
ce langage est, avec le C, idéal pour ceux qui doivent assurer la portabilité de leurs programmes
au niveau des fichiers sources (pas des exécutables).
Les principaux avantages du C++ sont les suivants :
grand nombre de fonctionnalités ;
performances du C ;
facilité d'utilisation des langages objets ;
portabilité des fichiers sources ;
facilité de conversion des programmes C en C++, et,
en particulier, possibilité d'utiliser toutes les fonctionnalités du langage C ;
contrôle d'erreurs accru.
On dispose donc de quasiment tout : puissance, fonctionnalité, portabilité et sûreté.
La richesse du contrôle d'erreurs du langage, basé sur un typage très fort, permet de signaler un grand
nombre d'erreurs à la compilation. Toutes ces erreurs sont autant d'erreurs que le programme ne fait pas
à l'exécution. Le C++ peut donc être considéré comme un « super C ». Le revers de la médaille est
que les programmes C ne se compilent pas directement en C++ : il est courant que de simples
avertissements en C soient des erreurs blocantes en C++. Quelques adaptations sont donc souvent nécessaires,
cependant, celles-ci sont minimes, puisque la syntaxe du C++ est basée sur celle du C. On remarquera que
tous les programmes C peuvent être corrigés pour compiler à la fois en C et en C++.
Tout le début de cette partie (chapitres 1 à 8) traite des fonctionnalités communes
au C et au C++, en insistant bien sur les différences entre ces deux langages. Ces chapitres présentent
essentiellement la syntaxe des constructions de base du C et du C++. Le début de cette partie
peut donc également être considéré comme un cours allégé sur le langage C. Cependant, les constructions
syntaxiques utilisées sont écrites de telle sorte qu'elles sont compilables en C++. Cela signifie qu'elles
n'utilisent pas certaines fonctionnalités douteuses du C. Ceux qui désirent utiliser la première partie
comme un cours de C doivent donc savoir qu'il s'agit d'une version épurée de ce langage. En particulier,
les appels de fonctions non déclarées ou les appels de fonctions avec trop de paramètres ne sont pas
considérés comme des pratiques de programmation valables.
Les chapitres suivants (chapitres 8 à 12) ne traitent que du C++. Le Chapitre 8
traite de la programmation orientée objet et de toutes les extensions qui ont été apportées au langage
C pour gérer les objets. Le Chapitre 9 présente le mécanisme des exceptions du langage, qui
permet de gérer les erreurs plus facilement. L'identification dynamique des types sera décrite dans le
Chapitre 10. Le Chapitre 11 présente la notion d'espace de nommage,
que l'on utilise afin d'éviter les conflits de noms entre les différentes parties d'un grand projet.
Enfin, le Chapitre 12 décrit le mécanisme des template, qui permet
d'écrire des portions de code paramétrées par des types de données ou par des valeurs constantes.
Ces dernières notions sont utilisées intensivement dans la bibliothèque standard C++, aussi la lecture
complète de la première partie est-elle indispensable avant de s'attaquer à la deuxième.
Dans toute cette première partie, la syntaxe sera donnée, sauf exception, avec
la convention suivante : ce qui est entre crochets ('[' et ']')
est facultatif. De plus, quand plusieurs éléments de syntaxe sont séparés par une barre verticale
('|'), l'un de ces éléments, et un seulement, doit être présent (c'est
un « ou » exclusif). Enfin, les points de suspension désigneront une itération éventuelle
du motif précédent.
Par exemple, si la syntaxe d'une commande est la suivante :
[fac|rty|sss] zer[(kfl[,kfl[...]])];
les combinaisons suivantes seront syntaxiquement correctes :
zer;
fac zer;
rty zer;
zer(kfl);
sss zer(kfl,kfl,kfl,kfl);
mais la combinaison suivante sera incorrecte :
fac sss zer()
pour les raisons suivantes :
fac et sss sont mutuellement
exclusifs, bien que facultatifs tous les deux ;
au moins un kfl est nécessaire si les parenthèses
sont mises ;
il manque le point virgule final.
Rassurez-vous, il n'y aura pratiquement jamais de syntaxe aussi compliquée. Je suis
sincèrement désolé de la complexité de cet exemple.