Vous pouvez télécharger
l'ensemble des fichiers constituant ce cours. Vous pourrez alors l'installer sur votre machine personnelle et le lire avec tout navigateur. Il vous suffira d'ouvrir le fichier index.html
La version pdf du support de cours est téléchargeable ici, celle des diaporamas là.
Tout ce qui concerne la stl (cours et exercices) est téléchargeable là.
Les versions sources des transparents se trouvent sur github
Vous pouvez aussi installer ce cours sur votre serveur web, mais dans ce cas merci de noter que ce cours est placé sous licence Creative Commons, "Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 non transposé (CC BY-NC-ND 3.0)"
Si vous trouvez des inexactitudes, ou si vous avez des idées d'améliorations, merci de me contacter.
Cliquez là-dessus pour accéder à une page
destinée aux terriens normaux, qui vous donnera des explications plus
simples à comprendre, en particulier
grâce à des analogies avec le monde réel.
Il y a des exemples de code dans le cours. Je ne garantis pas qu'ils fonctionnent, tout simplement parce qu'ils sont pour la plupart incomplets, ou sont du "pseudo-code" plutôt que du code réel. Regardez les exercices si vous voulez du code qui fonctionne pour de vrai.
Peut-être voudrez-vous mettre en pratique les
notions expliquées, sans obligatoirement regarder le corrigé des
exercices. Dans ce cas, il vous faut savoir écrire un programme C++
minimum, par exemple celui qui écrit hello world
sur
l'écran.
#include <iostream> using namespace std; int main(int argc, char* argv[]) { cout << "Nombre de paramètres: " << argc << endl; cout << "Nom du programme : " << argv[0] << endl; cout << "Hello world" << endl; cerr << "Hello buggy world" << endl; return 0; };
Il s'agit d'instructions d'entrées-sorties. La première écrit sur la sortie standard, la seconde sur l'erreur standard. Les deux premières lignes vous permettent d'utiliser la bibliothèque standard. Prenez-les pour l'instant comme des formules magiques, ce n'est qu'à la fin du cours que vous comprendrez réellement de quoi il retourne
Le C++
est un langage très simple à apprendre (mais si...) mais il y a
tout-de-même quelques difficultés. Celles-ci sont indiquées comme ce
paragraphe-ci.
Certaines
règles, dites "règles d'or", sont plutôt des
règles de bon usage que des règles imposées par le
compilateur. Elles sont indiquées comme ceci.
Et chez les autres, comment ça se dit ?
Derrière cette icône sont regroupées quelques comparaisons avec
d'autres langages objets:
certaines notions se retrouvent (mais se disent différemment), alors
que d'autres notions sont absentes de certains langages.
J'ai volontairement fait l'impasse sur plusieurs aspects du langage:
.h
et .cpp
n'est pas abordé. inline
inline
pour
améliroer la rapidité d'exécution; ce point n'est pas abordé en détails. Le C++ est apparu durant les années 80; il s'agit d'une création de Bjarne Stroustrup, un informaticien qui travaillait chez ATT sur de gros projets d'informatique distribuée. Quelques dates:
La syntaxe évolue bien entendu d'un langage à l'autre, mais comme ceux-ci sont fortement apparentés entre eux, les différences de syntaxe sont au fond mineures. Par contre, la manière dont les données sont traitées va beaucoup évoluer au cours du temps; BCPL et B sont des langages non typés: cela signifie que les données seront toutes rassemblées dans des tableaux de "mots", encore appelés "cellules". La taille de chaque cellule est tout simplement la taille de cellule élémentaire utilisée sur la machine (18 bits). Normal, au fond, pour un langage destiné à remplacer l'assembleur, tout en gardant ses principales caractéristiques. Cela a cependant deux conséquences importantes:
En 1970, un nouvel ordinateur (DEC pdp 11) est acquis par l'équipe: dès lors, la taille des mots n'est plus 18 bits, mais 16 bits, et l'adressage se fait par octets. Le langage B est rapidement recodé pour fonctionner sur la nouvelle machine, mais de gros problèmes se posent alors:
La seule manière de s'en sortir est alors de doter
le langage de variables de différents types. Le nouveau
langage, appelé C, inclut donc la notion de types: int, char,
float
, puis le type struct
fait son apparition un
peu plus tard.
On voit donc bien l'évolution, qui s'est poursuivie jusqu'au C++: on part d'une situation où le langage n'est au fond qu'un "super-assembleur", pour gagner petit à petit en abstraction, (type struct
en particulier), ce qui permettra au langage d'être utilisé pour un usage plus général. Toutefois, on reste toujours "proche de la machine", de sorte que le C peut dans la plupart des cas remplacer totalement l'assembleur, même pour développer du code proche du hardware (pilotes de périphériques, par exemple).
Cette évolution a été poursuivie par Stroustrup lors de la conception du C++: le type class
, qui est l'aboutissement du type struct
, permet d'implémenter un très haut niveau d'abstraction des données; en même temps, le C++ étant un surensemble du C, il reste un langage de choix pour l'informatique système.