Présentation du langage

Cette page vous prĂ©sentera quelques caractĂ©ristiques du C++, les diffĂ©rences avec d’autres langages que vous avez Ă©tudiĂ©s jusque lĂ , pourquoi est-ce que certains disent que C++ est compliquĂ©, alors que pas forcĂ©ment, et ce qui fait que le langage est aussi utilisĂ© aujourd’hui. Promis, c’est la seule page du cours oĂč vous trouverez autant de pavĂ©s 🙂


Quelques caractéristiques

C++ est un langage de programmation informatique inventĂ© dans les annĂ©es 1980 par un informaticien nommĂ© Bjarne Stroustrup. Il s’agit d’un langage



 Compilé

Tout comme le C, le C++ est un langage compilĂ©. Nous aurons donc besoin d’un compilateur afin de gĂ©nĂ©rer le programme exĂ©cutable Ă  partir de son code source.
Contrairement aux langages interprĂ©tĂ©s (Python) ou semi-interprĂ©tĂ©s (Java), une fois le programme compilĂ©, celui-ci peut directement ĂȘtre exĂ©cutĂ© par le systĂšme d’exploitation.
L’avantage est que le programme est gĂ©nĂ©ralement plus rapide Ă  exĂ©cuter, puisqu’il n’est pas nĂ©cessaire de passer par un interprĂ©teur.
En revanche, l’exĂ©cutable ne sera pas portable et il faudra recompiler le programme pour chacun des systĂšmes sur lequel il devra ĂȘtre exĂ©cutĂ©. Cela implique donc soit de fournir les exĂ©cutables pour l’ensemble des systĂšmes que l’on souhaite supporter, soit de distribuer son code-source pour que chacun puisse compiler le programme pour le systĂšme qu’il utilise.


 Orienté-objet

Comme le Java, C++ est un langage orientĂ©-objet. On pourra donc y dĂ©finir des classes, dotĂ©es de fonctions membres et d’attributs, dĂ©finir des relations d’hĂ©ritage entre elles et redĂ©finir le comportement de base des classes mĂšres dans les classes filles.
Cependant, le C++ n’est pas un langage purement orientĂ©-objet. On peut dĂ©finir des fonctions en dehors de toute classe (on parle alors de fonctions libres), voire mĂȘme implĂ©menter des programmes complets sans dĂ©finir la moindre classe.


 Générique

Un langage est dit gĂ©nĂ©rique s’il permet d’appliquer un mĂȘme algorithme sur diffĂ©rents types de donnĂ©es. Dans le cas du C++, la gĂ©nĂ©ricitĂ© s’exprime via les mĂ©canismes suivants :
- Le polymorphisme : on peut passer un objet de type Chien Ă  une fonction recevant un objet de type Animal,
- La surcharge : on peut dĂ©finir diffĂ©rentes fonctions avec le mĂȘme nom, dĂšs lors qu’elles acceptent un nombre diffĂ©rent de paramĂštres, ou que ces paramĂštres ne sont pas de mĂȘme type,
- Les templates (ou “patrons” en français, mais nous utiliserons toujours le terme anglais dans ce cours) : il est possible de dĂ©finir des types et fonctions permettant de travailler avec des paramĂštres gĂ©nĂ©riques.


Un langage complexe ?

Le C++ est un langage qui est souvent qualifié de complexe.

Pour commencer, celui-ci ne dispose pas de garbage-collector. Il faut donc manipuler avec soin la mĂ©moire allouĂ©e, penser Ă  la libĂ©rer lorsqu’elle n’est plus utilisĂ©e et faire attention de maniĂšre gĂ©nĂ©rale Ă  la durĂ©e de vie des entitĂ©s du programme.

Ensuite, le code produit en C++ peut rapidement devenir illisible. Les espaces et tabulations n’étant pas significatifs comme en Python, le C++ repose sur l’utilisation de (), {} et ; pour dĂ©limiter les expressions, instructions et blocs d’exĂ©cutions. L’utilisation de symboles ne se limite pas Ă  ça. On retrouve Ă©galement l’utilisation de <> (templates), :: (namespaces) ou encore [] (tableaux). Finalement, lorsque tous ces caractĂšres se retrouvent encapsulĂ©s les uns dans les autres, il peut ĂȘtre difficile de dĂ©chiffrer certains bouts de code.

Il est toujours possible de rendre son code plus clair en dĂ©finissant des variables pour expliciter des expressions, ou des fonctions pour extraire un ensemble d’instructions.

Enfin, pour prĂ©server la rĂ©tro-compatibilitĂ© du C++, trĂšs peu de nouveaux mots-clefs ont Ă©tĂ© ajoutĂ©s au fil des versions. La syntaxe des nouvelles fonctionnalitĂ©s se base donc souvent sur la rĂ©utilisation de mots-clefs dĂ©jĂ  existants, mais utilisĂ©s dans un autre contexte, ou encore sur l’utilisation de caractĂšres spĂ©ciaux.
Les lambdas du C++ par exemple se présentent sous la forme suivante : [c1, c2](int p1, int p2) { return (c1 + p1) - (c2 + p2); }.
Pas trùs digeste, n’est-ce pas ? 🙄

Ces diffĂ©rents points font du C++ un langage plutĂŽt difficile Ă  aborder. Mais en rĂ©alitĂ©, une fois la syntaxe dĂ©mystifiĂ©e et le concept de durĂ©e de vie des entitĂ©s intĂ©grĂ©, il devient relativement aisĂ© de le comprendre et de programmer avec ! 🏆


Un langage populaire

C++ est l’un des rares langages orientĂ©s-objet permettant une gestion extrĂšmement fine de la mĂ©moire et des composants matĂ©riel de la machine. Il est Ă©galement trĂšs performant, ce qui fait de lui le langage de prĂ©dilection dans des domaines pour lesquels la performance est critique : systĂšmes d’exploitation, systĂšmes embarquĂ©s, pilotes, moteurs de recherche, jeux vidĂ©os, moteurs de rendu 3D, etc.

Mais C++ ne se limite pas qu’à ces domaines. Il est un des langages de programmation les plus utilisĂ©s Ă  travers le monde pour le dĂ©veloppement d’applications ou d’API. Cette popularitĂ© peut s’expliquer par le fait qu’il est extrĂȘmement bien documentĂ© et qu’il dispose d’une large communautĂ© Ă  laquelle s’adresser en cas de difficultĂ©. On peut aussi supposer que les nombreuses Ă©volutions qu’il a connues depuis une dizaine d’annĂ©es, autant pour apporter de nouvelles fonctionnalitĂ©s que pour le rendre plus intuitif Ă  utiliser, ont participĂ© Ă  son succĂšs.

Un autre aspect important et apprĂ©ciĂ© du C++ est qu’il s’agit d’un langage sans surprise. Le standard spĂ©cifie tout ce qui est supportĂ©, et surtout, tout ce qui ne l’est pas (undefined behavior). Si quelque chose est supportĂ©, alors le standard dĂ©finit un comportement que les compilateurs devront garantir quelque soit la machine sur laquelle le programme sera exĂ©cutĂ©. Cela permet aux programmeurs d’ĂȘtre assurĂ©s que ce qui doit fonctionner fonctionnera effectivement, et de ne pas s’étonner si ce qui est spĂ©cifiĂ© comme undefined behavior ne fonctionne pas comme ils l’espĂ©raient.


Liens utiles