C++

📚 DĂ©butant

Fonctions

Les fonctions permettent de décomposer votre code en blocs réutilisables.

Déclaration et définition

#include <iostream> // Déclaration de la fonction int additionner(int a, int b); int main() { int resultat = additionner(5, 3); std::cout << "Résultat: " << resultat << std::endl; return 0; } // Définition de la fonction int additionner(int a, int b) { return a + b; }

Fonctions void et paramÚtres par référence

#include <iostream> // Fonction sans retour void afficherMessage(std::string message) { std::cout << message << std::endl; } // Passage par référence (modifie la variable originale) void doubler(int& nombre) { nombre *= 2; } int main() { afficherMessage("Bonjour!"); int x = 5; doubler(x); std::cout << "x vaut maintenant: " << x << std::endl; // 10 return 0; }

Surcharge de fonctions

#include <iostream> int max(int a, int b) { return (a > b) ? a : b; } double max(double a, double b) { return (a > b) ? a : b; } int max(int a, int b, int c) { return max(max(a, b), c); }

Pointeurs et références

Les pointeurs

#include <iostream> int main() { int nombre = 42; int* pointeur = &nombre; // pointeur stocke l'adresse de nombre std::cout << "Valeur: " << nombre << std::endl; std::cout << "Adresse: " << &nombre << std::endl; std::cout << "Pointeur: " << pointeur << std::endl; std::cout << "Valeur via pointeur: " << *pointeur << std::endl; // Modifier via le pointeur *pointeur = 100; std::cout << "Nouvelle valeur: " << nombre << std::endl; // 100 return 0; }

Les références

#include <iostream> int main() { int original = 42; int& reference = original; // reference est un alias de original reference = 100; std::cout << "Original: " << original << std::endl; // 100 return 0; }
💡 DiffĂ©rence : Une rĂ©fĂ©rence est un alias permanent qui ne peut pas ĂȘtre rĂ©assignĂ©. Un pointeur peut pointer vers diffĂ©rentes variables.

Vecteurs (std::vector)

#include <iostream> #include <vector> int main() { // Créer un vecteur std::vector<int> nombres; // Ajouter des éléments nombres.push_back(10); nombres.push_back(20); nombres.push_back(30); // Accéder aux éléments std::cout << "Premier: " << nombres[0] << std::endl; std::cout << "Taille: " << nombres.size() << std::endl; // Parcourir avec range-based for for (int n : nombres) { std::cout << n << " "; } std::cout << std::endl; // Supprimer le dernier élément nombres.pop_back(); // Vider le vecteur nombres.clear(); return 0; }

Structures (struct)

#include <iostream> #include <string> struct Personne { std::string nom; int age; double taille; }; int main() { // Créer une structure Personne alice; alice.nom = "Alice"; alice.age = 25; alice.taille = 1.65; // Initialisation directe Personne bob = {"Bob", 30, 1.80}; std::cout << alice.nom << " a " << alice.age << " ans" << std::endl; return 0; }

Classes de base

#include <iostream> #include <string> class Rectangle { private: double largeur; double hauteur; public: // Constructeur Rectangle(double l, double h) { largeur = l; hauteur = h; } // Méthodes double calculerAire() { return largeur * hauteur; } double calculerPerimetre() { return 2 * (largeur + hauteur); } // Getters double getLargeur() { return largeur; } double getHauteur() { return hauteur; } // Setters void setLargeur(double l) { largeur = l; } void setHauteur(double h) { hauteur = h; } }; int main() { Rectangle rect(10.0, 5.0); std::cout << "Aire: " << rect.calculerAire() << std::endl; std::cout << "PérimÚtre: " << rect.calculerPerimetre() << std::endl; return 0; }

Gestion de fichiers

Écrire dans un fichier

#include <iostream> #include <fstream> int main() { std::ofstream fichier("exemple.txt"); if (fichier.is_open()) { fichier << "Ligne 1\n"; fichier << "Ligne 2\n"; fichier << "Ligne 3\n"; fichier.close(); std::cout << "Fichier écrit avec succÚs" << std::endl; } else { std::cout << "Erreur d'ouverture" << std::endl; } return 0; }

Lire depuis un fichier

#include <iostream> #include <fstream> #include <string> int main() { std::ifstream fichier("exemple.txt"); std::string ligne; if (fichier.is_open()) { while (std::getline(fichier, ligne)) { std::cout << ligne << std::endl; } fichier.close(); } else { std::cout << "Erreur d'ouverture" << std::endl; } return 0; }

Allocation dynamique

#include <iostream> int main() { // Allouer un entier int* p = new int; *p = 42; std::cout << *p << std::endl; delete p; // Libérer la mémoire // Allouer un tableau int taille = 5; int* tableau = new int[taille]; for (int i = 0; i < taille; i++) { tableau[i] = i * 10; } for (int i = 0; i < taille; i++) { std::cout << tableau[i] << " "; } delete[] tableau; // Libérer le tableau return 0; }
⚠ Important : Toujours libĂ©rer la mĂ©moire allouĂ©e avec new en utilisant delete ou delete[] !

STL : Containers et algorithmes

Map (dictionnaire)

#include <iostream> #include <map> #include <string> int main() { std::map<std::string, int> ages; // Ajouter des éléments ages["Alice"] = 25; ages["Bob"] = 30; ages["Charlie"] = 35; // Accéder std::cout << "Age d'Alice: " << ages["Alice"] << std::endl; // Parcourir for (auto& paire : ages) { std::cout << paire.first << ": " << paire.second << std::endl; } return 0; }

Algorithmes de base

#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> nombres = {5, 2, 8, 1, 9}; // Trier std::sort(nombres.begin(), nombres.end()); // Trouver un élément auto it = std::find(nombres.begin(), nombres.end(), 8); if (it != nombres.end()) { std::cout << "Trouvé à la position: " << std::distance(nombres.begin(), it) << std::endl; } // Min et max int minimum = *std::min_element(nombres.begin(), nombres.end()); int maximum = *std::max_element(nombres.begin(), nombres.end()); return 0; }

Exercices pratiques

  1. Créez une classe Compte bancaire avec des méthodes pour déposer et retirer
  2. Écrivez un programme qui lit un fichier et compte le nombre de mots
  3. Créez un gestionnaire de contacts avec std::vector et struct
  4. Implémentez une fonction de tri par sélection sur un tableau
  5. Faites un programme qui utilise std::map pour compter les occurrences de mots