Avant de Commencer
Bienvenue dans la Piscine C++ ! Avant de plonger dans le Module 00, assurons-nous que vous avez les connaissances fondamentales nécessaires pour réussir.
À Qui S’adresse Ce Guide
Section intitulée « À Qui S’adresse Ce Guide »Ce guide est conçu pour les étudiants de 42 qui ont terminé la Piscine C. Vous devriez déjà être familier avec :
- La programmation C de base (variables, boucles, fonctions)
- Les pointeurs et la gestion de la mémoire (malloc/free)
- La compilation avec gcc et l’utilisation des Makefiles
- Le travail dans un environnement terminal
Si vous venez du C, vous êtes au bon endroit. Le C++ s’appuie sur le C, ajoutant de nouvelles fonctionnalités puissantes tout en restant compatible avec la plupart du code C.
Qu’est-ce que le C++ ?
Section intitulée « Qu’est-ce que le C++ ? »Le C++ a été créé par Bjarne Stroustrup en 1979 comme une extension du C. Le ”++” dans le nom vient de l’opérateur d’incrémentation en C, suggérant que le C++ est “C plus plus”.
Pourquoi le C++ Plutôt que le C ?
Section intitulée « Pourquoi le C++ Plutôt que le C ? »Le C++ ajoute plusieurs fonctionnalités clés qui rendent la programmation plus facile et plus sûre :
| Fonctionnalité | C | C++ |
|---|---|---|
| Programmation Orientée Objet | Non | Oui (classes, héritage) |
| Sécurité des Types | Faible | Plus forte |
| Gestion de la Mémoire | Manuelle seul | Manuelle + RAII |
| Bibliothèque Standard | Limitée | Extensive (STL) |
| Surcharge de Fonctions | Non | Oui |
| Références | Non | Oui |
| Exceptions | Non | Oui |
La Philosophie Centrale
Section intitulée « La Philosophie Centrale »Le C++ suit le principe de “vous ne payez pas pour ce que vous n’utilisez pas.” Des fonctionnalités comme les fonctions virtuelles ou les exceptions n’ajoutent de surcharge que lorsque vous les utilisez réellement. Cela rend le C++ adapté aux applications critiques en termes de performance.
Concepts Clés Que Vous Apprendrez
Section intitulée « Concepts Clés Que Vous Apprendrez »Tout au long de la Piscine C++, vous apprendrez ces concepts fondamentaux :
Programmation Orientée Objet (POO)
Section intitulée « Programmation Orientée Objet (POO) »La POO est un paradigme de programmation où vous organisez le code autour d‘“objets” plutôt que de fonctions. Pensez-y ainsi :
- En C : Vous avez des données (structs) et des fonctions qui opèrent sur ces données
- En C++ : Vous avez des objets qui contiennent à la fois les données ET les fonctions qui opèrent dessus
Ce regroupement de données et de comportements s’appelle l’encapsulation.
Classes et Objets
Section intitulée « Classes et Objets »Une classe est comme un plan pour créer des objets. Un objet est une instance d’une classe.
Analogie : Une classe est comme un plan architectural pour une maison. Les maisons réellement construites à partir de ce plan sont des objets. Chaque maison a la même structure (définie par le plan) mais peut avoir un contenu différent (meubles, couleurs de peinture, etc.).
Gestion de la Mémoire
Section intitulée « Gestion de la Mémoire »Le C++ vous donne plus d’outils pour gérer la mémoire :
- Allocation sur la pile : Automatique, rapide, taille limitée (comme les variables locales en C)
- Allocation sur le tas : Manuelle avec
new/delete(remplacemalloc/free) - RAII : Un pattern où les objets nettoient automatiquement leurs ressources
La Standard Template Library (STL)
Section intitulée « La Standard Template Library (STL) »La STL fournit des conteneurs prêts à l’emploi (comme les tableaux dynamiques et les tables de hachage) et des algorithmes. Vous n’aurez plus à implémenter des listes chaînées à partir de zéro !
C vs C++ : Qu’est-ce qui Change ?
Section intitulée « C vs C++ : Qu’est-ce qui Change ? »Voici un aperçu rapide des différences que vous rencontrerez :
C: printf("Hello %s\n", name);C++: std::cout << "Hello " << name << std::endl;Allocation Mémoire
Section intitulée « Allocation Mémoire »C: int *arr = malloc(10 * sizeof(int)); free(arr);
C++: int *arr = new int[10]; delete[] arr;Chaînes de Caractères
Section intitulée « Chaînes de Caractères »C: char str[100]; strcpy(str, "Hello"); strcat(str, " World");
C++: std::string str = "Hello"; str += " World";Structures de Données
Section intitulée « Structures de Données »C: struct Point { int x; int y; }; struct Point p; p.x = 10;
C++: class Point { int x, y; public: Point(int x, int y) : x(x), y(y) {} }; Point p(10, 20); // Appel du constructeurStructure des Modules C++ de 42
Section intitulée « Structure des Modules C++ de 42 »La Piscine C++ se compose de 10 modules (00-09) plus un examen :
| Module | Sujet | Concepts Clés |
|---|---|---|
| 00 | Bases du C++ | Namespaces, classes, iostream, strings |
| 01 | Mémoire | Références, pointeurs vers membres, flux de fichiers |
| 02 | OCF & Opérateurs | Forme Canonique Orthodoxe, surcharge d’opérateurs |
| 03 | Héritage | Classes base/dérivées, spécificateurs d’accès |
| 04 | Polymorphisme | Fonctions virtuelles, classes abstraites, interfaces |
| 05 | Exceptions | Try/catch/throw, exceptions personnalisées |
| 06 | Casts | static_cast, dynamic_cast, const_cast, reinterpret_cast |
| 07 | Templates | Templates de fonctions, templates de classes |
| 08 | Conteneurs STL | vector, list, map, stack, queue, itérateurs |
| 09 | STL Pratique | Algorithmes, sélection de conteneurs, applications |
Chaque module s’appuie sur les précédents, donc complétez-les dans l’ordre.
Comment Utiliser Ce Guide
Section intitulée « Comment Utiliser Ce Guide »Cette documentation est organisée en Guides - chaque guide combine théorie et exercices pratiques pour un module.
Ce Que Contient Chaque Guide
Section intitulée « Ce Que Contient Chaque Guide »- Concepts : Ce que signifie la nouvelle syntaxe, pourquoi les patterns existent, pièges courants
- Exercices : Walkthroughs étape par étape et explications ligne par ligne
- Diagrammes visuels et exemples pratiques
- Stratégies de test pour chaque exercice
Workflow Recommandé
Section intitulée « Workflow Recommandé »- Lisez le Guide pour le module actuel (section théorie d’abord)
- Lisez le PDF du sujet attentivement
- Tentez les exercices vous-même
- Consultez les walkthroughs si vous êtes bloqué
- Revoyez les Pièges Courants avant l’évaluation
Environnement de Développement
Section intitulée « Environnement de Développement »Vous aurez besoin de ces outils :
Compilateur
Section intitulée « Compilateur »Utilisez c++ ou clang++ avec le standard C++98 :
c++ -Wall -Wextra -Werror -std=c++98 main.cpp -o programLe flag -std=c++98 est important ! 42 exige la conformité C++98.
Utilisez l’éditeur avec lequel vous êtes à l’aise. Choix populaires :
- vim/neovim
- VS Code
- CLion
Terminal
Section intitulée « Terminal »Vous compilerez et exécuterez les programmes depuis le terminal, comme en C.
Regles du Sujet 42 (S’applique a Tous les Modules)
Section intitulée « Regles du Sujet 42 (S’applique a Tous les Modules) »Ces regles viennent des PDFs de sujet officiels de 42. Si un guide contredit le sujet, suivez le sujet.
- Compilez avec
c++et-Wall -Wextra -Werror, et gardez la compatibilite C++98 (-std=c++98) - Aucune bibliotheque externe (C++11 et Boost sont interdits)
- Fonctions C interdites :
*printf(),*alloc()(malloc/calloc/realloc), etfree()(note 0) using namespace ...etfriendsont interdits sauf mention explicite (note -42)- Les conteneurs/algorithmes STL sont interdits jusqu’aux Modules 08 et 09 (note -42)
- Sauf mention contraire, la sortie va sur stdout et se termine par une nouvelle ligne
- Pas d’implementation dans les headers (sauf templates), et utilisez toujours des include guards
A partir du Module 02, les classes doivent suivre la Forme Canonique Orthodoxe (OCF), sauf mention explicite.
Erreurs Courantes de Débutant à Éviter
Section intitulée « Erreurs Courantes de Débutant à Éviter »Avant de commencer, soyez conscient de ces problèmes courants :
-
Utiliser
using namespace std;- 42 l’interdit. Utilisez toujours le préfixestd::. -
Mélanger les styles C et C++ - N’utilisez pas
printfquand vous devriez utiliserstd::cout. N’utilisez pasmallocquand vous devriez utilisernew. -
Oublier le point-virgule après la définition de classe - Les classes se terminent par
};pas juste} -
Ne pas comprendre références vs pointeurs - Le Module 01 couvre cela en détail.
-
Ignorer la Forme Canonique Orthodoxe - À partir du Module 02, chaque classe a besoin de constructeurs appropriés, destructeur et opérateur d’affectation.
Prêt à Commencer ?
Section intitulée « Prêt à Commencer ? »Vous avez maintenant les connaissances de base pour commencer la Piscine C++. Rendez-vous sur Module 00 : Fondamentaux C++ pour commencer votre voyage !
Rappelez-vous :
- Prenez votre temps avec chaque module
- Pratiquez en écrivant du code, pas seulement en lisant
- Utilisez les Guides comme référence
- N’hésitez pas à relire les modules précédents
Bonne chance !