Aller au contenu

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.

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.


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”.

Le C++ ajoute plusieurs fonctionnalités clés qui rendent la programmation plus facile et plus sûre :

FonctionnalitéCC++
Programmation Orientée ObjetNonOui (classes, héritage)
Sécurité des TypesFaiblePlus forte
Gestion de la MémoireManuelle seulManuelle + RAII
Bibliothèque StandardLimitéeExtensive (STL)
Surcharge de FonctionsNonOui
RéférencesNonOui
ExceptionsNonOui

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.


Tout au long de la Piscine C++, vous apprendrez ces concepts fondamentaux :

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.

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.).

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 (remplace malloc/free)
  • RAII : Un pattern où les objets nettoient automatiquement leurs ressources

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 !


Voici un aperçu rapide des différences que vous rencontrerez :

C: printf("Hello %s\n", name);
C++: std::cout << "Hello " << name << std::endl;
C: int *arr = malloc(10 * sizeof(int));
free(arr);
C++: int *arr = new int[10];
delete[] arr;
C: char str[100];
strcpy(str, "Hello");
strcat(str, " World");
C++: std::string str = "Hello";
str += " World";
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 constructeur

La Piscine C++ se compose de 10 modules (00-09) plus un examen :

ModuleSujetConcepts Clés
00Bases du C++Namespaces, classes, iostream, strings
01MémoireRéférences, pointeurs vers membres, flux de fichiers
02OCF & OpérateursForme Canonique Orthodoxe, surcharge d’opérateurs
03HéritageClasses base/dérivées, spécificateurs d’accès
04PolymorphismeFonctions virtuelles, classes abstraites, interfaces
05ExceptionsTry/catch/throw, exceptions personnalisées
06Castsstatic_cast, dynamic_cast, const_cast, reinterpret_cast
07TemplatesTemplates de fonctions, templates de classes
08Conteneurs STLvector, list, map, stack, queue, itérateurs
09STL PratiqueAlgorithmes, sélection de conteneurs, applications

Chaque module s’appuie sur les précédents, donc complétez-les dans l’ordre.


Cette documentation est organisée en Guides - chaque guide combine théorie et exercices pratiques pour un module.

  • 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
  1. Lisez le Guide pour le module actuel (section théorie d’abord)
  2. Lisez le PDF du sujet attentivement
  3. Tentez les exercices vous-même
  4. Consultez les walkthroughs si vous êtes bloqué
  5. Revoyez les Pièges Courants avant l’évaluation

Vous aurez besoin de ces outils :

Utilisez c++ ou clang++ avec le standard C++98 :

Fenêtre de terminal
c++ -Wall -Wextra -Werror -std=c++98 main.cpp -o program

Le 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

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), et free() (note 0)
  • using namespace ... et friend sont 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.

Avant de commencer, soyez conscient de ces problèmes courants :

  1. Utiliser using namespace std; - 42 l’interdit. Utilisez toujours le préfixe std::.

  2. Mélanger les styles C et C++ - N’utilisez pas printf quand vous devriez utiliser std::cout. N’utilisez pas malloc quand vous devriez utiliser new.

  3. Oublier le point-virgule après la définition de classe - Les classes se terminent par }; pas juste }

  4. Ne pas comprendre références vs pointeurs - Le Module 01 couvre cela en détail.

  5. Ignorer la Forme Canonique Orthodoxe - À partir du Module 02, chaque classe a besoin de constructeurs appropriés, destructeur et opérateur d’affectation.


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 !