Extrait
Extrait
Extrait
Matthieu Schaller
PROGRAMMEZ AVEC LE LANGAGE
C++ 2e édition
Vous aimeriez apprendre à programmer en C++ et vous cherchez un cours accessible aux
débutants ? Cet ouvrage est fait pour vous ! Conçu pour les débutants, il vous permettra de Mathieu Nebra
découvrir pas à pas le langage C++, la programmation orientée objet et bien d’autres choses !
Matthieu Schaller
Avec la participation de Ranga Gonnage
Qu’allez-vous apprendre ?
2e édition
• Qu’est-ce que la programmation ? Qu’est-ce qui
PROGRAMMEZ AVEC LE LANGAGE
C++
distingue le C++ des autres langages ?
• Installation d’un environnement de développement
et compilation de vos premiers programmes
C++
• Manipulation des variables, des fonctions,
des pointeurs, des références...
2e édition
À propos des auteurs
Co-fondateur d’OpenClassrooms, Mathieu Nebra
se passionne depuis l’âge de 13 ans pour la créa-
tion de cours en ligne. Son objectif : partager
la connaissance d’une façon nouvelle, cha-
leureuse et enfin accessible à tous. Auteur de
plusieurs best-sellers, il publie régulièrement
des cours en ligne et expérimente de nouvelles
approches pédagogiques avec la communauté
de plus d’un million de membres qu’il a fédérée.
Chercheur en astrophysique et cosmologie,
Matthieu Schaller est spécialiste en simulations
numériques de galaxies sur superordinateurs.
ISBN : 978-2-416-00886-3
Code éditeur : G0100886
32 E
C++
2e édition
Depuis 1925, les éditions Eyrolles s’engagent en proposant des livres pour comprendre le monde,
transmettre des savoirs et cultiver ses passions !
Pour continuer à accompagner toutes les générations à venir, nous travaillons de manière respon-
sable, dans le respect de l’environnement. Nos imprimeurs sont ainsi choisis avec la plus grande
attention, afin que nos ouvrages soient imprimés sur du papier issu de forêts gérées durablement.
Nous veillons également à limiter le transport en privilégiant des imprimeurs locaux. Ainsi, 89 %
de nos impressions se font en Europe, dont plus de la moitié en France.
En application de la loi du 11 mars 1957, il est interdit de reproduire intégralement ou partiellement le présent
ouvrage, sur quelque support que ce soit, sans l’autorisation de l’Éditeur ou du Centre Français d’exploitation
du droit de copie, 20, rue des Grands Augustins, 75006 Paris.
© Groupe Eyrolles, 2017
© Editions Eyrolles, 2023 pour la présente édition
www.editions-eyrolles.com
ISBN : 978-2-416-00886-3
Sauf mention contraire, le contenu de cet ouvrage est publié sous la licence : Creative Commons BY-NC-SA 2.0
La copie de cet ouvrage est autorisée sous réserve du respect des conditions de la licence. Texte complet de la
licence disponible sur : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
Le plan de ce livre a mûri pendant plusieurs années. Il se veut à la fois orienté débutants,
progressif et complet. Voici les différentes parties qui vous attendent.
1. Découverte de la programmation en C++ – Cette première partie démarre tout en
douceur en vous présentant le langage et ses domaines d’application. Nous apprendrons
ensuite à installer et à utiliser les outils nécessaires pour programmer, que ce soit sous
Windows, macOS ou Linux. Vous serez alors prêts à découvrir les fondamentaux de la
programmation en C++ et à créer vos premiers programmes.
2. Programmation Orientée Objet (POO) – Nous nous intéresserons à la programmation
orientée objet. Il s’agit d’une manière d’organiser ses programmes qui fait la force du C++.
Nous présenterons ce que sont les objets, les classes, l’héritage, le polymorphisme, etc. Ces
chapitres seront plus difficiles que ceux de la première partie, mais ils sont essentiels à la
maîtrise du langage. La difficulté sera néanmoins progressive afin de ne perdre personne
en cours de route.
Pratiquez régulièrement. N’attendez pas d’avoir fini la lecture de ce livre pour allumer votre
ordinateur et faire vos propres essais. Lorsque vous découvrez une nouvelle commande,
essayez-la et testez de nouveaux paramètres pour voir comment elle se comporte.
Afin de tirer parti d’OpenClassrooms (dont ce livre est issu), ce dernier vous propose ce que
l’on appelle des « codes web » : des codes à six chiffres qu’il faut saisir sur la page suivante
pour être automatiquement redirigé vers une autre page sans avoir à en recopier l’adresse :
http://openclassrooms.com/codeweb
Un formulaire vous y invite à rentrer votre code web et vous propose un premier essai avec
123456.
VI
Cet ouvrage reprend le cours sur C++ d’OpenClassrooms dans une édition revue et corrigée,
augmentée de nouveaux chapitres plus avancés1 et de notes de bas de page.
Il reprend les éléments qui ont fait le succès des cours du site, à savoir leur approche progres-
sive et pédagogique, leur ton décontracté, ainsi que les nombreux schémas aidant à mieux
comprendre le fonctionnement de la programmation en C++.
Bien que ce cours soit rédigé à quatre mains, nous nous exprimons à la première personne
du singulier. Cela renforce la proximité entre le lecteur et l’auteur2. Imaginez tout simplement
que vous êtes seul avec votre professeur dans une même pièce.
Remerciements
Nous tenons à remercier toutes les personnes qui nous ont aidés et soutenus dans la réali-
sation de ce livre.
Mathieu Nebra
Je souhaite remercier :
• mes parents, qui me font confiance et continuent de suivre attentivement mes projets ;
• Élodie, qui est toujours là pour me donner la dose de courage dont j’ai besoin ;
• Pierre Dubuc, qui s’est mis en quatre pour que ce livre soit publié dans les meilleures
conditions possibles ;
1 Vous y découvrirez notamment comment utiliser des itérateurs sur les flux, les chaînes de caractères, les
tableaux... et vous verrez que le C++ permet de faire du calcul scientifique.
2 Il faut noter que nous nous sommes répartis la rédaction des chapitres. Ainsi, nous nous exprimons en
« je » à tour de rôle.
VII
• notre infographiste, Fan Jiyong, qui a réalisé la couverture du premier tirage de ce livre, ainsi
que des illustrations des chapitres ;
• Matthieu Schaller, pour ses conseils avisés qui ont permis à ce cours – dont il est devenu
co-auteur – de gagner en rigueur et en précision ;
• l’équipe d’OpenClassrooms, qui fait un travail formidable pour améliorer le site ;
• et tous nos visiteurs qui nous font confiance : merci, merci, merci !
Matthieu Schaller
Je souhaite remercier :
• mes parents et ma famille, pour leur soutien indéfectible quel que soit le projet dans lequel
je m’embarque ;
• Mathieu Nebra, pour sa confiance, son enthousiasme, ses leçons de pédagogie et son temps
passé à corriger mon orthographe ;
• l’équipe d’OpenClassrooms, pour son travail et son aide lors de la relecture des chapitres ;
• Luc Hermitte pour ses précieux conseils et son immense expérience du C++ ;
• Jean-Cédric Chappelier, mon professeur d’informatique, pour son enseignement et la
rigueur qu’il a su apporter à mon bagage technique.
VIII
Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Créer un nouveau projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4 Utiliser la mémoire 39
Qu’est-ce qu’une variable ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Les noms de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Les types de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Déclarer une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Le cas des chaînes de caractères (strings). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Une astuce pour gagner de la place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Déclarer sans initialiser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Afficher la valeur d’une variable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Les références. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
D’autres variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Le problème des espaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Demander d’abord la valeur de pi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Modifier des variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Changer le contenu d’une variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Une vraie calculatrice de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Les constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Déclarer une constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Un premier exercice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Les raccourcis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
L’incrémentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
La décrémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Les autres opérations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Encore plus de maths !. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
L’en-tête cmath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Racine carrée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Autres fonctions présentes dans cmath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Le cas de la fonction puissance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
XI
XII
XIII
XIV
XV
18 L’héritage 247
Exemple d’héritage simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Comment reconnaître un héritage ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Notre exemple : la classe Personnage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
La classe Guerrier hérite de la classe Personnage. . . . . . . . . . . . . . . . . . . . . 249
La classe Magicien hérite aussi de Personnage. . . . . . . . . . . . . . . . . . . . . . . 251
La dérivation de type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Héritage et constructeurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Appeler le constructeur de la classe mère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Transmission de paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
La portée protected. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Le masquage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Une fonction de la classe mère. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
La fonction est héritée dans les classes filles. . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Le masquage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Le démasquage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
XVI
19 Le polymorphisme 263
La résolution des liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
La résolution statique des liens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
La résolution dynamique des liens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Les méthodes spéciales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Le cas des constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Le cas du destructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Le code amélioré. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Les collections hétérogènes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Le retour des pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Utiliser la collection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Les fonctions virtuelles pures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Le problème des roues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Les classes abstraites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
À vous de jouer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Index 287
XVII