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

Bonjour, merci et bravo pour ce cours.

J’ai regardé vite fait les vecteurs et les tableaux et pour moi il y a une erreur: il ne faut pas utilizer size(nom_tableau) ou empty(nom_tableau) mais nom_tableau.size() ou nom_tableau.empty(). En tout cas mon g++ n’accepte que cela.

PS: Pouvez-vous ajouter une date de mise à jour à coté du pdf svp ? Merci.

Et voilà pour la deuxième fournée. Merci à @mehdidou99 pour l’écriture et @Taurre pour la validation. ;)

informaticienzero

Ça fait plaisir de revenir dans la rédaction ! J’espère qu’on pourra vite vous apporter la suite ! :)

Évidemment, un grand merci à Taurre qui valide à la vitesse de la lumière !

+1 -0

Bonjour,

Déjà, merci pour ce cours ;) , je débute en programmation, et le C++ m’intéresse énormément ! Et on a enfin un cours francophone intéressant pour débuter la programmation en C++, tout en étant plutôt complet (avec celui de gbdivers) !

Et, d’autre part, j’ai trouvé une petite faute de Markdown ici, section « Qt Creator », sous-titre « Changer le compilateur » :

Par défaut, le compilateur fournit avec Qt Creator n’est pas à jour et ne nous permet pas de profiter de C++17. Il faut donc le changer. Commencez par vous rendre sur [ce site] pour télécharger la dernière version du compilateur. Le fichier en question s’appelle mingw-xx.y.exe.

Il n’y a pas de lien vers le site :p !

Cordialement :). Ou devrais-je dire Zestement :p ?

+2 -0
+4 -0

Bonjour,

Déjà, merci pour ce cours ;) , je débute en programmation, et le C++ m’intéresse énormément ! Et on a enfin un cours francophone intéressant pour débuter la programmation en C++, tout en étant plutôt complet (avec celui de gbdivers) !

Avec plaisir, ce genre de retour nous motive pour continuer !

Et, d’autre part, j’ai trouvé une petite faute de Markdown ici, section « Qt Creator », sous-titre « Changer le compilateur » :

Il n’y a pas de lien vers le site :p !

Cordialement :). Ou devrais-je dire Zestement :p ?

NTLyes

Bien vu, ce sera corrigé !

J’utilise, pour ma part, macOS, et je partage ici mon expérience pour utiliser C++17 avec Xcode 10.1 !

Voici les étapes à suivre :

PS: Ça serait sympa d’intégrer ça au tutoriel directement !

NTLyes

Merci, c’est utile en effet ! Alors comme QtCreator est déjà disponible sur MacOS, il n’y a pas utilité immédiate à le mettre dans un cours pour débutant. En effet, on ne va pas se mettre à décrire la procédure pour tous les IDE qui existent. Par contre, on pourra peut-être mettre un lien vers ton commentaire pour ceux qui veulent absolument utiliser XCode.

+2 -0

Je passe par là pour préciser que le cours étant en rédaction, il est toujours en beta. Voici le lien du sujet de beta pour ceux qui voudraient nous faire des retours, ou même simplement lire, les chapitres qui ne sont pas encore publiés.

EDIT : Je viens de me rendre compte qu’il y a un lien vers la beta dans l’introduction… Mais c’est pas grave, ça coûte rien de le rappeler ! ^^

+1 -0

Bonjour, j’ai suivi le tutoriel C++ d’OC mais ayant vu qu’il est obsolète (l’est-il toujours d’ailleurs ?), j’ai arrêté mais je suis quand même intéressé par le C++, je suis donc très content d’être tombé sur un tuto de cette qualité (Bravo !) mais je me pose quand même quelques questions :

  • Pourquoi ne pas avoir parlé des switch ?
  • Quelle est la différence exacte entre itérateurs, références et pointeurs ?
  • J’ai fini la partie publiée du cours, mais est-ce que ce qui est dans la bêta est déjà complet ou est-ce qu’il faut encore attendre un peu (Je suis nouveau sur ce site et je ne suis donc pas familier avec le système de bêta…)

Merci !

Salut ! Dans l’ordre :

Bonjour, j’ai suivi le tutoriel C++ d’OC mais ayant vu qu’il est obsolète (l’est-il toujours d’ailleurs ?)

Oui il l’est toujours, et ne sera vraisemblablement pas mis à jour avant longtemps (jamais ?).

J’ai arrêté mais je suis quand même intéressé par le C++, je suis donc très content d’être tombé sur un tuto de cette qualité (Bravo !)

Merci ! :)

  • Pourquoi ne pas avoir parlé des switch ?

C’est juste que comme ce n’est pas absolument nécessaire et assez peu utilisé, on a préféré évité d’encombrer le débutant avec ça. Après, rien n’est fixe, on peut toujours changer des choses selon les retours.

  • Quelle est la différence exacte entre itérateurs, références et pointeurs ?

Ce sera abordé plus en profondeur dans les parties suivantes du cours, mais pour l’instant voilà ce qu’il faut retenir dans le cours :

  • Les itérateurs sont des outils pour pointer un élément d’une collection de manière standard, notamment pour pouvoir y appliquer des algorithmes standard sans avoir besoin de connaître le fonctionnement exact de la collection.
  • Les références sont des "étiquettes" sur des variables (cf le cours pour plus de détails).
  • Les pointeurs, on oublie pour l’instant. Ça sera abordé plus loin dans le cours, et de manière moderne. Ils sont, à mon sens, abordés beaucoup trop tôt dans le cours d’OC, et très mal abordés qui plus est. Du coup, il vaut mieux que tu les oublies pour l’instant, on en reparlera en tant voulu. ;)
  • J’ai fini la partie publiée du cours, mais est-ce que ce qui est dans la bêta est déjà complet ou est-ce qu’il faut encore attendre un peu (Je suis nouveau sur ce site et je ne suis donc pas familier avec le système de bêta…)
Gusali

La beta est principalement pour que des relecteurs puissent nous donner leur avis pour améliorer le cours avant de le publier, et parfois on met en beta des choses pas complètes voire amenées à changer. Du coup, tu peux lire ce qui est en beta, mais il faudra repasser dessus une fois publié. Pour un débutant complet, je conseillerais peut-être d’attendre les versions publiées, sachant qu’on publie assez régulièrement des nouveaux chapitres. Après, à toi de voir. :)

+1 -0

Merci beaucoup pour ces informations si rapides !

Pour un débutant complet, je conseillerais peut-être d’attendre les versions publiées, sachant qu’on publie assez régulièrement des nouveaux chapitres.

D’accord, je vais donc chercher un tuto à mettre sous la dent en attendant la publication.

A bientôt j’espère !

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