Généralité sur le langage C++

Généralités sur le langage

Pourquoi apprendre C++

C++ est actuellement le langage de programmation dominant pour les logiciels scientifiques interactifs de large envergure. Que ce soit pour des applications en 3D et en graphique: Maya, 3DStudio, ZBrush, Houdini, Photoshop, Unreal Engine, etc., mais également dans de nombreux autres domaines: MS Word, Facebook, Tensor Flow, etc. possèdent tout un coeur (partie du programme réalisant les taches les plus critiques de calculs) codé en C++.

Notez que la plupart de ces logiciels possèdent des interfaces avec des langages de scripts de plus haut niveau afin de pouvoir être utilisés plus efficacement pour réaliser des prototypes (ex. Python, Lua, C#, etc.). Ces scripts ne sont cependant qu'un moyen de faire appel facilement aux fonctionnalités du coeur de ces logiciel qui sont codés pour leur part en C++. Ne négligez donc pas l'apprentissage du C++ si vous souhaitez être en mesure de pouvoir comprendre le fonctionnement de ces logiciels de manière approfondie.

Principes du C++

Principe généraux et comparaisons à d'autres langages

Le langage C++ est dit multi-paradigm. C'est-à-dire qu'il peut être utilisé dans une vaste gamme d'application, et suivant plusieurs approches (procédural, objet, fonctionnel, meta-programmation, etc.). C'est à l'heure actuelle l'un des seuls langages ayant un écosystème stable et complet permettant, d'un côté, de développer à très bas niveau en étant très proche du système d'exploitation/matériel (et donc très efficace), et d'un autre côté de proposer des abstractions de plus haut niveau quasiment sans aucun surcout en temps de calcul.

A titre de comparaison:

Le pendant de la richesse du langage C++ est cependant sa complexité. Il n'existe ainsi pas une unique manière de coder en C++ (utilisation de pointeurs à la C, pur objet, fonctionnel, etc); chaque approche pouvant se prêter plus ou moins à un type d'application ou d'habitude. Le C++ est un langage très technique difficile à lire et à écrire de par la précision et la rigueur nécessaire à l'écriture du code associé (type de variable, positionnement en mémoire, template, etc.).

Dans le cas présent, nous utiliserons principalement une programmation procédurale, où les objets seront généralement de petites structures allouées statiquement afin de pouvoir être créées et manipulées de manière légère (en mémoire) et rapide (en temps de calcul). Nous utiliserons les surcharges d'opérateurs pour modéliser et manipuler aisément des objets mathématiques (vecteurs, matrices). Nous utiliserons également largement les conteneurs de la librairie standard permettant de gérer des objets dynamiques sans avoir à manipuler explicitement les allocations mémoires, ainsi que les instructions du C++ dit "moderne" (norme C++14 ou supérieur) qui permet une écriture plus succinte et lisible de certaines instructions.
A l'opposé, nous n'aborderons dans ce cours pas (ou que très marginalement) la gestion manuelle de la mémoire, l'utilisation de pointeurs, le polymorphisme, et l'écriture de templates.

Notion de langage compilé

C++ est un langage dit "compilé". C'est-à-dire que le code C++ est converti en code assembleur qui peut être directement exécuté par le processeur central (CPU) dans un fichier binaire dit "exécutable". La compilation peut être une opération longue. Par contre, une fois celui-ci compilé, l'exécution est généralement beaucoup plus rapide que l'exécution d'un langage interprété.

C++ est un langage dit "typé statiquement" (à l'opposé des langages de scripts dits "dynamiques"). Toute variable doit avoir un type fixe connu au moment de la compilation, et ce type ne peut pas varier au cours de la durée de vie de la variable.
Le typage des variables implique d'être rigoureux lors de l'écriture du code. Cette plus grande rigueur permet cependant au compilateur d'être plus précis pour détecter les erreurs (avant même l'exécution du programme) et garantir automatiquement la cohérence globale du code (ex. passage de données ayant un type cohérent d'une fonction à l'autre, etc.). Bien que plus contraignant à écrire dans un premier temps (par rapport à un langage de script), le typage statique est souvent indispensable pour le développement de logiciels de grande envergure (100aines-milliers - millions de lignes de codes).

Références

Pour approfondir vos connaissances en C++, il vous est possible de vous référer au cours INF442 qui aborde davantage de détails sur le langage, ainsi qu'au livre "The C++ Programming Language" de Bjarne Stroustrup (créateur du langage C++).

De manière générale, n'hésitez pas à chercher des informations sur la référence en ligne du langage ainsi que de sa bibliothèque standard : CPP Reference.