La programmation en C++ moderne

Apprenez la programmation de zéro jusqu'à l'infini !

Bienvenue dans ce cours sur l’apprentissage de la programmation avec le langage C++. Vous débutez complètement et n’avez qu’une vague idée de ce que peut bien être la programmation ? On vous a dit d’en apprendre plus sur le C++ ? Alors ce tutoriel est fait pour vous.

Pour rendre ce cours pédagogique, nous alternerons entre théorie, explications et détails techniques d’un côté et exercices, travaux pratiques et questions-réponses de l’autre. L’accent sera mis sur la rigueur, la qualité et les bonnes pratiques. Le rythme sera progressif, chaque concept étant introduit en temps voulu et en lien avec ce que nous aurons déjà vu.

Prérequis

Prérequis
Lire cette introduction à la programmation afin d’avoir des bases pour aborder l’apprentissage du C++.

Objectifs
Vous former à la programmation en vous donnant des bases solides sur lesquelles continuer.
Vous former au C++ moderne.

Remerciements

Car ce cours n’aurait jamais pu voir le jour sans l’aide et le soutien de plusieurs personnes.

  • Un merci particulier à @gbdivers pour son cours Débuter en C++ moderne qui aura été une source d’inspiration pour l’écriture du présent cours, à qui nous avons emprunté plusieurs passages très bien écrits et qui n’aura cessé de nous aider à améliorer ce cours par ses nombreuses remarques et suggestions.
  • Tous les membres qui ont participé à la bêta et qui ont grandement aidé à améliorer la qualité de ce tutoriel, par leurs nombreuses remarques, suggestions et corrections. Toutes vos participations, petites et grandes, nous ont été extrêmement précieuses et utiles pour produire un cours meilleur.
  • Toute l’équipe de Zeste de Savoir ; en particulier, un grand merci à @Taurre et @Glordim qui se sont chargés de la validation.
  • Et l’ensemble des lecteurs, pour avoir choisi ce cours.
À venir

La partie POO est toujours en rédaction. Les mises à jour viendront au fil de l’eau.

Le début du voyage

  1. Le C++, qu'est-ce que c'est ?

    1. Petite mise au point

    2. Tour d'horizon du C++

    3. La documentation

  2. Le minimum pour commencer

    1. Des outils en ligne

    2. Des outils plus poussés

    3. Un mot concernant Windows

    4. Un mot concernant GNU/Linux

  3. Rencontre avec le C++

    1. Compilons notre premier programme

    2. Démystification du code

    3. Les commentaires

  4. Une super mémoire

    1. Les littéraux

    2. Les variables

    3. Qu'en déduisez-vous ?

    4. Les entrées

  5. Le conditionnel conjugué en C++

    1. Les booléens

    2. if — Si, et seulement si…

    3. else — Sinon…

    4. else if — La combinaison des deux précédents

    5. Conditions imbriquées

    6. [T.P] Gérer les erreurs d'entrée — Partie I

    7. La logique booléenne

    8. Tester plusieurs expressions

    9. Exercices

  6. Des boucles qui se répètent, répètent, répètent…

    1. while — Tant que…

    2. Exercices

    3. do while — Répéter … tant que

    4. [T.P] Gérer les erreurs d'entrée — Partie II

    5. for — Une boucle condensée

    6. Boucles imbriquées

    7. Convention de nommage

    8. Contrôler plus finement l'exécution de la boucle

  7. Au tableau !

    1. Un tableau c'est quoi ?

    2. std::vector — Mais quel dynamisme !

    3. Exercices

    4. std::array — Le tableau statique

    5. std::string — Un type qui cache bien son jeu

  8. Déployons la toute puissance des conteneurs

    1. Le socle de base : les itérateurs

    2. Des algorithmes à gogo !

    3. Personnalisation à la demande

    4. Exercices

  9. Des flux dans tous les sens

    1. Avant-propos

    2. std::ofstream — Écrire dans un fichier

    3. std::ifstream — Lire dans un fichier

    4. Exercice

    5. Encore plus de flux !

On passe la deuxième !

  1. Découpons du code — Les fonctions

    1. Les éléments de base d'une fonction

    2. Exercices

    3. Quelles sont vos références ?

    4. Nos fonctions sont surchargées !

    5. [T.P] Gérer les erreurs d'entrée — Partie III

    6. Dessine-moi une fonction

  2. Erreur, erreur, erreur…

    1. L'utilisateur est un idiot

    2. À une condition… ou plusieurs

    3. Le développeur est un idiot

    4. Les tests unitaires à notre aide

    5. [T.P] Gérer les erreurs d'entrée — Partie IV

    6. L'exception à la règle

    7. [T.P] Gérer les erreurs d'entrée — Partie V

  3. Des fonctions somme toute lambdas

    1. Une lambda, c'est quoi ?

    2. Syntaxe

    3. Exercices

    4. On va stocker ça où ?

    5. Paramètres génériques

    6. [T.P] Gérer les erreurs d'entrée — Partie VI

    7. [T.P] Gérer les erreurs d'entrée — Partie VII

    8. Capture en cours…

  4. Envoyez le générique !

    1. Quel beau modèle !

    2. [T.P] Gérer les erreurs d'entrée - Partie VIII

    3. Instanciation explicite

    4. Ce type là, c'est un cas !

  5. De nouvelles structures de données

    1. struct — Un agrégat de données

    2. std::tuple — Une collection hétérogène

    3. std::unordered_map — Une table associative

    4. std::unordered_set — Représenter un ensemble

    5. Un peu d'ordre, voyons !

    6. Une longue énumération

  6. Reprendrez-vous un peu de sucre syntaxique ?

    1. Ce type est trop long !

    2. Décomposons tout ça

    3. La surcharge d'opérateurs

  7. [T.P] Un gestionnaire de discographie

    1. L'énoncé

    2. Guide de résolution

    3. Corrigé complet

    4. Conclusion et pistes d'améliorations

  8. Découpons du code — Les fichiers

    1. Le principe

    2. La sécurité, c'est important

    3. Découpons le TP !

    4. Les avantages du découpage en fichiers

    5. Le cas des templates

Interlude - Être un développeur

  1. Avant-propos

    1. Ce que nous avons appris

    2. Différents paradigmes

    3. Brancher le cerveau avant tout

    4. Savoir se débrouiller

  2. Mais où est la doc ?

    1. Lire une page de doc

    2. Exercices

    3. Documenter son code avec Doxygen

    4. Quelques bonnes pratiques

  3. Compilation en cours…

    1. Le préprocesseur

    2. La compilation

    3. Le linker

    4. Schéma récapitulatif

  4. Chasse aux bugs !

    1. Le principe

    2. Un code d'exemple

    3. Visual Studio

    4. Qt Creator

    5. En ligne de commande avec gdb

  5. Une foule de bibliothèques

    1. Quelles bibliothèques choisir ?

    2. Généralités

    3. Installer Boost

    4. Installer SFML

  6. Améliorer ses projets

    1. git — Sauvegarder et versionner son code

    2. GitHub — Partager son code

    3. CMake — Automatiser la compilation de nos programmes

    4. Aller plus loin

La Programmation Orientée Objet

  1. Premiers pas avec la POO

    1. Le principe : des objets bien serviables

    2. Un peu de vocabulaire

    3. En C++, ça donne quoi ?

    4. Désolé, cet objet n'est pas modifiable

    5. On ne fait pas d'exception

    6. Découpage en fichiers

    7. Exercices

  2. Qui c'est qui va construire tout ça ?

    1. Encapsulation et invariants

    2. On cherche un constructeur

    3. Constructeur par défaut

    4. Soyons explicites

    5. En toute amitié

    6. Exercices

  3. Une classe de grande valeur

    1. Une histoire de sémantique

    2. La sémantique de valeur, c'est quoi ?

    3. Égalité

    4. Le retour des opérateurs

    5. Copier des objets

  4. [T.P] Entrons dans la matrice !

    1. Qu'est-ce qu'une matrice ?

    2. L'énoncé

    3. Correction détaillée

    4. Aller plus loin

Annexes

  1. Index



Ce cours s’achève ici, mais votre apprentissage du C++ est loin d’être terminé. Il reste encore beaucoup de choses à apprendre. Vous pouvez commencer par les contenus C++ disponibles sur Zeste de Savoir. Certains approfondissent des concepts que nous avons introduits dans ce tutoriel, d’autres vous présenteront des notions nouvelles. Enfin, pour continuer votre apprentissage, voici quelques derniers conseils.

  • Soyez curieux : fouillez sur Internet pour découvrir de nouvelles méthodes, approfondissez celles que vous connaissez, renseignez-vous, testez de nouveaux outils, lisez des bons livres, etc.
  • Entrainez-vous : c’est le meilleur moyen de progresser. Faites des projets qui vous tiennent à cœur, mettez en œuvre des algorithmes connus, réalisez des exercices, participez au code des autres, etc.
  • Lisez des codes produits par d’autres personnes : découvrez comment elles procèdent, apprenez d’elles de nouvelles techniques ou façons de faire et progressez en suivant leurs conseils. Vous pouvez par exemple commencer en visitant les forums de ce site.
  • Enfin, le plus important : amusez-vous ! ;)

143 commentaires

Si je lis bien, le livre se fonde aussi sur le C++20 ce qui me parait somme toute logique, mais pas le cours c’est ca ?

kamelitoloveless

À l’époque où le tutoriel a été publié la première fois sur Zeste de Savoir, la norme la plus récente était C++17. Quand le cours a été adapté en livre, C++20 était déjà sorti et son support par les différents compilateurs permettait déjà d’en parler dans le livre.

Donc le livre inclut effectivement plusieurs passage C++20 qui ne sont pas présents sur la version Zeste de Savoir. :)

informaticienzero

Le cours va t’il être mis à jour avec les nouveautés de C++20 ?

Bonjour,

Je voudrais savoir le niveau auquel est censé amené ce tutoriel. Dans l’introduction il est dit "Vous former à la programmation en vous donnant des bases solides sur lesquelles continuer.". Je trouve cela un peu vague. Il est clair que dans le cas du C sur ce site, on avait un tutoriel assez complet et détaillé. Qu’en est-il du C++ ? Est-ce que ce tutoriel donne un aperçu exhaustif de ce qui se fait en POO ? J’ai aussi vu que le cours était encore en cours d’améliorations sur la POO justement, quand pensez-vous que le tutoriel sera complet ?

J’ai aussi pas mal épluché internet pour trouver les meilleurs livres gratuits sur le sujet. Où vous situez-vous ? Je pense qu’il faut absolument détailler davantage les objectifs du cours dans l’introduction ainsi que à qui il s’adresse, et surtout ce qu’il n’aborde pas et où il s’arrête. Où se situe-t-on par rapport au métier de développeur quand on maîtrise votre cours à la perfection ? Avez-vous une philosophie particulière par rapport au reste qui se trouve dans la littérature ? Des professionnels/profs ont ils déjà fait des retours sur votre cours ? Quels pourraient être les premiers reproches qu’on pourrait adresser à votre travail et qu’y répondriez-vous ? C’est le genre de choses qui devraient se trouver dans une introduction il me semble.

Merci pour votre travail (j’ai suivi le cours de C qui est très bon)

+0 -0

Est-ce que ce tutoriel donne un aperçu exhaustif de ce qui se fait en POO ?

Pas du tout.

Comparé au C, le C++ est beaucoup beaucoup plus dense. Pour faire le tour des bases, il faut faudrait un livre 2–3 fois plus gros (*). Et pour faire le tour complet du C++, il faudrait encore beaucoup plus.

  • = En suivant la même approche pédagogique. Certains livres, comme "Tour of C++" abordent plus de choses en moins de page, mais c’est un livre destiné à des devs qui connaissent déjà le C++ et veulent se mettre a jour. C’est pas du tout la même pédagogie.

pour trouver les meilleurs livres gratuits sur le sujet. Où vous situez-vous ?

A ma connaissance, c’est le seul cours gratuit en français et à jour sur le C++.

Où se situe-t-on par rapport au métier de développeur quand on maîtrise votre cours à la perfection ?

Dans les études, ca va correspondre à 1/3 mois de boulot, sur 3/5 ans d’étude pour former un dev. Donc c’est une toute petite partie de la formation.

Un apprentissage complet du C++ prend 1/3 ans, mais c’est en plus de la formation pour être dev.

Des professionnels/profs ont ils déjà fait des retours sur votre cours ?

Le cours a été relu par plusieurs pros (dont moi).

Quels pourraient être les premiers reproches qu’on pourrait adresser à votre travail et qu’y répondriez-vous ?

Les discussions sur la rédaction de ce cours sont publiques et dispo sur le forum. Et il y a pleins de critiques que l’on peut faire sur ce cours. Mais le plus gros problème, c’est le temps. Les auteurs et relecteurs sont bénévoles, donc il faut faire des choix.

+1 -0

Est-ce que ce tutoriel donne un aperçu exhaustif de ce qui se fait en POO ?

Pas du tout.

Comparé au C, le C++ est beaucoup beaucoup plus dense. Pour faire le tour des bases, il faut faudrait un livre 2–3 fois plus gros (*). Et pour faire le tour complet du C++, il faudrait encore beaucoup plus.

  • = En suivant la même approche pédagogique. Certains livres, comme "Tour of C++" abordent plus de choses en moins de page, mais c’est un livre destiné à des devs qui connaissent déjà le C++ et veulent se mettre a jour. C’est pas du tout la même pédagogie.

pour trouver les meilleurs livres gratuits sur le sujet. Où vous situez-vous ?

A ma connaissance, c’est le seul cours gratuit en français et à jour sur le C++.

Où se situe-t-on par rapport au métier de développeur quand on maîtrise votre cours à la perfection ?

Dans les études, ca va correspondre à 1/3 mois de boulot, sur 3/5 ans d’étude pour former un dev. Donc c’est une toute petite partie de la formation.

Un apprentissage complet du C++ prend 1/3 ans, mais c’est en plus de la formation pour être dev.

Des professionnels/profs ont ils déjà fait des retours sur votre cours ?

Le cours a été relu par plusieurs pros (dont moi).

Quels pourraient être les premiers reproches qu’on pourrait adresser à votre travail et qu’y répondriez-vous ?

Les discussions sur la rédaction de ce cours sont publiques et dispo sur le forum. Et il y a pleins de critiques que l’on peut faire sur ce cours. Mais le plus gros problème, c’est le temps. Les auteurs et relecteurs sont bénévoles, donc il faut faire des choix.

gbdivers

Merci pour cette réponse qui m’est utile. Puisque les ressources gratuites sont très limitées et que vous êtes le seul ouvrage "complet" et à jour sur internet, auriez-vous des recommandations sur la littérature payante de ce qui se fait de mieux et de plus avancé pour se rapprocher du métier de développeur ? Concernant le langage C, j’avais déjà les bases comme je suis ingénieur dans un autre domaine, je m’en suis donc référé uniquement au tuto de zeste de savoir (très bon). En revanche pour le c++ je pense qu’il faudrait suivre 2 cours pour avoir quelque chose de "sûr" car comme vous me le confirmez c’est un sujet plus délicat sur le plan théorique et pratique. Je vous pose la question car quand on cherche un ouvrage sur internet, on a du mal à trier et donc on sait pas quoi acheter. Si vous auriez quelque chose à recommander de "complet" et abordant en détail la POO et la COO ce serait un plaisir. Merci d’avance

Si tu sais deja programmer, probablement commencer par "Tour of C++" (vue d’ensemble du C++, rapide a lire) puis "Professional C++" (entre plus dans les details).

Ensuite, ca va dependre ce que tu veux approfondir. Tu peux regarder par exemple "Beautiful C++", "Embracing Modern C++ Safely", "Effective Modern C++", "Discovering Modern C++", "Software Architecture with C++", "The C++ Workshop", et pleins d’autres. Et il faut également regarder les livres hors C++ (design pattern, conception, tests, archi des ordis, etc)

+2 -0

Bonjour, je n’y connais rien en langage de programmation, mais je me renseigne pour mon fils de 16 ans qui souhaite se diriger ensuite vers des études dans la création de jeux vidéos ou animation 2D/3D. Il s’est récemment mis au Python pour s’amuser, mais je vois que c’est surtout le C++ (et le C sharp) pour le gaming… Je vois qu’on peut commencer dans Zeste de savoir (et surtout pas dans Openclassroom si j’ai bien compris, car CPP trop ancien), mais j’aurais voulu savoir quels bouquins vous recommandiez en parallèle, en français ou en anglais (je suis de la vieille école, j’aime avoir des bouquins à côté ou de référence) en 2022 pour CPP (car je vois que des nouvelles versions se succèdent, la dernière en 2020 ?)et éventuellement pour Csharp. Merci de m’orienter !

Le téléchargement est possible via le bouton PDF ou epub dans le menu à gauche.

Pour ce qui est du droit d’auteur, seule une republication l’enfreindrait, l’imprimer et l’étudier pour soi est tout à fait autorisé, c’est même pour ça que le cours existe.

Notons que pour ce cours en particulier, une version commerciale est disponible aux éditions d-booker. L’achat soutiendra les auteurs :).

Bonjour,

Il est indiqué que le tutoriel est toujours en cours de rédaction et en effet je constate qu’il y a des parties vides dans le tutoriel en PDF. Et dans la version beta dont le lien est dispo pas loin, on ne peut pas télécharger de PDF.

La version bêta semble complète et si j’ai bien compris, le cours a été mis sous forme d’un livre achetable pour environ 30€ en version numérique. Mais du coup je comprends pas

  • pourquoi le cours complet n’est pas dispo ici et seulement en beta puisqu’il a été publié ?
  • pourquoi il est dit que le cours évolue toujours alors qu’il a été publié en livre payant
  • pourquoi il faut payer pour l’avoir en version numérique alors que le livre est consultable en illimité sur ce site en version beta ?

Finalement : la version beta est-elle bien "définitive" ? Ne faudrait-il donc pas mettre à jour le cours ici et rendre dispo le PDF ?

Cordialement

Et merci pour le travail titanesque de ce tutoriel, vous êtes des héros. Je pense que j’achèterai le livre en version papier.

+1 -0

La version du livre est une version spécifique, qui vient de la beta mais a été travaillé en plus par l’éditeur, les auteurs et les relecteurs techniques.

La version beta est travaillée uniquement par les auteurs. C’est a eux de la finaliser et de la proposer en version finale.

+0 -0

jamais dans ma vie j’ai eu un tel tutoriel complet , j’apprend le c++ et tout y est carrémeent, un garand merci à vous, ave cette aide précieuse que vous nous donner, on fera evoluer le monde du numerique, tout en esperant qu’une version pdf existe de ce document , j’espère y avoir accès un jour, car avec une version pdf, on p lire de partout, dans les bus,metro, université, bref un grand merci j’espère également que vous m’aideriez à avoir ce document en version pdf #la_programmation_en_c_moderner

Salut ! Je me permets de venir poster une question "polémique". J’ai appris le C, le Python, et mon niveau dans ces langages est "intermédiaire" je dirais. Le C++ me fait de l’œil mais je tiens la réflexion suivante… Est-elle fondée ? Vous me direz. Je me dis que l’avantage de C++ sur C est de pouvoir faire de plus gros projets, et son avantage sur Python est d’être (bien) plus rapide à l’exécution (en dépit d’une lisibilité bien moindre). Sauf que je me dis qu’un gros projet n’a a priori pas besoin de beaucoup de rapidité (Python est donc un bon choix) et qu’un petit projet (bas niveau) peut toujours être fait en C sans soucis. Donc, je ne peux pas m’empêcher de penser aujourd’hui que C++ est pris au piège et ce langage ne peut qu’être en perte de vitesse. Me trompe-je ? Voilà comme j’imagine qu’il y a de fervents défenseurs du C++ par ici, je vais avoir d’autres points de vue plus murs que le mien…

+0 -0

Je me dis que l’avantage de C++ sur C est de pouvoir faire de plus gros projets, et son avantage sur Python est d’être (bien) plus rapide à l’exécution (en dépit d’une lisibilité bien moindre). Sauf que je me dis qu’un gros projet n’a a priori pas besoin de beaucoup de rapidité (Python est donc un bon choix) et qu’un petit projet (bas niveau) peut toujours être fait en C sans soucis. Donc, je ne peux pas m’empêcher de penser aujourd’hui que C++ est pris au piège et ce langage ne peut qu’être en perte de vitesse. Me trompe-je ?

AScriabine

C’est trop simpliste. Des gros projets sont fait en C et le C++ convient aussi a des petits projets ou aux projets sans besoin de perfs. Et des projets python peuvent être rapide et lisible.

Le choix d’un langage (ou plusieurs sur un gros projet) n’a souvent pas grand chose a voir avec les qualités propres du langage. Les préférences personnelles, les effets de mode, l’environnement technique existant, etc. interviennent pas mal dans le choix.

Pour la perte de vitesse, ça fait des années que certains pensent cela. Et pareil pour d’autres langages. A mon avis, ce n’est pas le cas. Ce n’est même pas encore un langage de niche.

+3 -0

Bonjour,

Merci pour ce super tutoriel !

Néanmoins, j’ai une question : pourquoi le sujet de l’héritage n’est-t-il pas abordé dans la partie IV ?

Il me semble pourtant que c’est une notion assez importante en POO…

Sinon je trouve ce tutoriel vraiment excellent, il m’a permis de plonger en douceur dans le bain du C++ !

Bonne journée,

@flopy78

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte