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 đ
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âŠ
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.
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.
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.
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 ! đ
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.