Introduction au langage C++98 : classes, objets, encapsulation, variables statiques
Un module progressif de 3 exercices pour maîtriser les fondamentaux de la POO en C++
Découvrir la programmation orientée objet en C++98 à travers des projets concrets et progressifs
Métrique | Valeur |
---|---|
📁 Exercices | 3 (Ex00, Ex01, Ex02) |
📝 Fichiers source | 11 fichiers C++ |
🏗️ Classes | 3 (Contact, PhoneBook, Account) |
⚡ Lignes de code | ~800 LOC |
🎯 Conformité | 100% C++98 |
Exercice | Description | Concepts clés | Difficulté |
---|---|---|---|
Ex00 — Megaphone | Conversion en majuscules | Arguments, boucles | ⭐ |
Ex01 — PhoneBook | Répertoire téléphonique | Classes, encapsulation | ⭐⭐ |
Ex02 — Account | Gestion de comptes bancaires | Variables statiques, logs | ⭐⭐⭐ |
- Compilateur C++98 :
g++
ouclang++
- Make : Système de build
- Terminal : Interface en ligne de commande
# Clone le repository
git clone https://github.com/nassimfx/CPP-Module-00.git
cd CPP-Module-00
# Compile tous les exercices
for dir in ex00 ex01 ex02; do
echo "🔨 Compilation de $dir..."
cd $dir && make && cd ..
done
# Test Ex00
cd ex00 && ./megaphone "Hello World" # → HELLO WORLD
# Test Ex01
cd ex01 && ./bin/phonebook # Interface interactive
# Test Ex02
cd ex02 && ./account_tests | cat -e # Logs formatés
🔊 Ex00 - Megaphone en action
$ ./megaphone "hello world from 42"
HELLO WORLD FROM 42
$ ./megaphone
* LOUD AND UNBEARABLE FEEDBACK NOISE *
📱 Ex01 - PhoneBook Interface
╔══════════════════════════════════════╗
║ 📱 My Awesome PhoneBook 📱 ║
╚══════════════════════════════════════╝
Available commands:
ADD - Add a new contact
SEARCH - Search contacts
EXIT - Quit program
PhoneBook> ADD
👤 Enter first name: John
👤 Enter last name: Doe
🏷️ Enter nickname: johndoe
📞 Enter phone number: 0123456789
🤫 Enter darkest secret: I love C++
✅ Contact added successfully!
PhoneBook> SEARCH
INDEX|FIRST NAME| LAST NAME| NICKNAME|
----------|----------|----------|----------|
0| John| Doe| johndoe|
Enter index (0-0): 0
👤 First Name: John
👤 Last Name: Doe
🏷️ Nickname: johndoe
📞 Phone Number: 0123456789
🤫 Darkest Secret: I love C++
🏦 Ex02 - Account System Logs
[20250127_184455] index:0;amount:42;created
[20250127_184455] index:1;amount:54;created
[20250127_184455] index:2;amount:957;created
[20250127_184455] accounts:3;total:1053;deposits:0;withdrawals:0
[20250127_184455] index:0;p_amount:42;deposit:5;amount:47;nb_deposits:1
[20250127_184455] index:1;p_amount:54;withdrawal:refused
[20250127_184455] index:0;amount:47;closed
[20250127_184455] index:1;amount:54;closed
[20250127_184455] index:2;amount:957;closed
Le premier contact avec les arguments de ligne de commande et la manipulation de chaînes en C++98.
cd ex00
make
# Avec arguments
./megaphone "shhhh... students are asleep"
# Output: SHHHH... STUDENTS ARE ASLEEP
# Sans arguments
./megaphone
# Output: * LOUD AND UNBEARABLE FEEDBACK NOISE *
- ✅ Conversion automatique en majuscules (
std::toupper
) - ✅ Gestion des arguments multiples (concatenation)
- ✅ Message par défaut si aucun argument fourni
- ✅ Gestion des caractères spéciaux et accents
- Arguments
argc
etargv
- Boucles
for
avec index - Fonctions de caractères (
toupper
) - Conditions simples
Introduction à la programmation orientée objet : classes, encapsulation, et gestion d'état.
╔══════════════════════════════════════╗
║ 📱 My Awesome PhoneBook 📱 ║
╚══════════════════════════════════════╝
Available commands:
ADD - Add a new contact
SEARCH - Search contacts
EXIT - Quit program
PhoneBook>
cd ex01
make
./bin/phonebook
- ✅ Interface interactive avec couleurs ANSI et emojis
- ✅ Validation robuste des entrées utilisateur
- ✅ Ring buffer intelligent : remplace le plus ancien contact
- ✅ Affichage formaté : colonnes de 10 caractères alignées à droite
- ✅ Gestion d'erreurs : EOF, entrées vides, index invalides
- ✅ Recherche intuitive par index avec validation
Champ | Largeur | Alignement | Troncature |
---|---|---|---|
Index | 10 | Droite | - |
First Name | 10 | Droite | . |
Last Name | 10 | Droite | . |
Nickname | 10 | Droite | . |
- Classes et objets (
Contact
,PhoneBook
) - Encapsulation : membres privés avec getters/setters
- Constructeurs/destructeurs
- Algorithmes de données : ring buffer
- Interface utilisateur : entrée/sortie interactive
- Validation d'entrées et gestion d'erreurs
Maîtrise des variables statiques de classe : partage d'état entre toutes les instances.
class Account {
private:
// Variables STATIQUES (partagées entre toutes les instances)
static int _nbAccounts; // Nombre total de comptes
static int _totalAmount; // Montant total de tous les comptes
static int _totalNbDeposits; // Nombre total de dépôts
static int _totalNbWithdrawals; // Nombre total de retraits
// Variables D'INSTANCE (propres à chaque compte)
int _accountIndex; // Index unique du compte
int _amount; // Solde actuel
int _nbDeposits; // Nombre de dépôts sur ce compte
int _nbWithdrawals; // Nombre de retraits sur ce compte
};
cd ex02
make
./account_tests | cat -e
[20250127_184455] index:0;amount:42;created
[20250127_184455] index:1;amount:54;created
[20250127_184455] accounts:2;total:96;deposits:0;withdrawals:0
[20250127_184455] index:0;p_amount:42;deposit:5;amount:47;nb_deposits:1
[20250127_184455] index:0;p_amount:47;withdrawal:refused
[20250127_184455] index:0;amount:47;closed
- ✅ Gestion multi-comptes avec index automatique
- ✅ Dépôts sécurisés avec mise à jour des statistiques
- ✅ Retraits contrôlés : refus si solde insuffisant
- ✅ Statistiques globales en temps réel
- ✅ Logs horodatés : format
[YYYYMMDD_HHMMSS]
- ✅ Destruction propre avec décompte automatique
Événement | Format | Exemple |
---|---|---|
Création | index:X;amount:Y;created |
index:0;amount:42;created |
Dépôt | index:X;p_amount:Y;deposit:Z;amount:W;nb_deposits:N |
index:0;p_amount:42;deposit:5;amount:47;nb_deposits:1 |
Retrait OK | index:X;p_amount:Y;withdrawal:Z;amount:W;nb_withdrawals:N |
index:0;p_amount:47;withdrawal:5;amount:42;nb_withdrawals:1 |
Retrait refusé | index:X;p_amount:Y;withdrawal:refused |
index:0;p_amount:42;withdrawal:refused |
Fermeture | index:X;amount:Y;closed |
index:0;amount:42;closed |
Infos globales | accounts:X;total:Y;deposits:Z;withdrawals:W |
accounts:8;total:19349;deposits:8;withdrawals:8 |
- Variables statiques : partage d'état entre instances
- Méthodes statiques : accès aux données globales
- Horodatage : manipulation de
std::time
etstd::strftime
- Gestion de mémoire : constructeurs/destructeurs
- Logging structuré : format de sortie strict
- Validation métier : règles bancaires (solde suffisant)
Composant | Version | Description |
---|---|---|
Langage | C++98 | Standard ISO/IEC 14882:1998 |
Compilateur | c++ |
Flags: -Wall -Wextra -Werror -std=c++98 |
Build System | Make | Règles: all , clean , fclean , re |
Architecture | POO | Classes, encapsulation, héritage |
CPP-Module-00/
├── ex00/
│ ├── megaphone.cpp
│ └── Makefile
├── ex01/
│ ├── Contact.hpp/cpp
│ ├── PhoneBook.hpp/cpp
│ ├── main.cpp
│ ├── Makefile
│ ├── obj/ # Fichiers objets (.o)
│ └── bin/ # Exécutable
├── ex02/
│ ├── Account.hpp/cpp
│ ├── tests.cpp
│ ├── Makefile
│ └── obj/ # Fichiers objets (.o)
└── README.md
- 🚫 Pas de
using namespace std;
: Utilisation explicite destd::
- 🔒 Include guards : Protection contre les inclusions multiples
- 📝 Headers propres : Déclarations uniquement, pas d'implémentation
- 📐 Format strict : Respect exact des spécifications de sortie
- 🗂️ Organisation : Séparation claire des fichiers objets et exécutables
- ⚡ Performance : Compilation optimisée avec flags de sécurité
- 🧹 Code propre : Noms de variables explicites, commentaires pertinents
- ✅ Norme C++98 strictement respectée
- ✅ Flags de compilation :
-Wall -Wextra -Werror
- ✅ Structure des fichiers conforme aux exigences
- ✅ Format de sortie identique aux spécifications
- ✅ Gestion d'erreurs robuste et cohérente
- C++98 Reference - Documentation officielle
- 42 Subject PDF - Sujet officiel
- Professional README Guide - Guide de rédaction
- Variables statiques en C++ - Documentation détaillée
- Ring Buffer Algorithm - Principe algorithmique
- ANSI Escape Codes - Codes couleur terminal
Concept | Description | Exercice |
---|---|---|
🔤 Arguments CLI | Gestion argc /argv |
Ex00 |
🏗️ Classes | Définition et instanciation | Ex01 |
🔒 Encapsulation | Membres privés/publics | Ex01 |
⚡ Variables statiques | Partage d'état global | Ex02 |
🎮 Interface utilisateur | Entrée/sortie interactive | Ex01 |
📊 Algorithmes | Ring buffer, validation | Ex01-02 |
📝 Logging | Formatage et horodatage | Ex02 |
- Ex00 : Bases - Arguments, boucles, manipulation de chaînes
- Ex01 : POO - Classes, objets, encapsulation, algorithmes
- Ex02 : Avancé - Variables statiques, logging, architecture
- ✅ Code production-ready avec gestion d'erreurs robuste
- ✅ Architecture propre respectant les standards C++98
- ✅ Interface utilisateur moderne avec couleurs et emojis
- ✅ Documentation complète pour faciliter la maintenance
Développé avec ❤️ dans le cadre du cursus 42 School - Module 00 C++