Le Mega Cours de C++


Table des matières
Avant-propos
I. Le langage C++
1. Première approche du C++
1.1. Les commentaires en C++
1.2. Les types prédéfinis du C/C++
1.3. Notation des nombres
1.4. La déclaration des variables
1.5. Les instructions
1.6. Les fonctions
1.7. La fonction main
1.8. Les fonctions d'entrée-sortie de base
1.9. Exemple de programme complet
2. Le C/C++ un peu plus loin
2.1. Les structures de contrôle
2.2. Retour sur les types
2.3. Les classes de stockage
3. Les pointeurs et références
3.1. Notion d'adresse
3.2. Notion de pointeur
3.3. Déréférencement, indirection
3.4. Notion de référence
3.5. Lien entre les pointeurs et les références
3.6. Passage de paramètres par variable ou par valeur
3.7. Arithmétique des pointeurs
3.8. Utilisation des pointeurs avec les tableaux
3.9. Références et pointeurs constants et volatiles
3.10. Les chaînes de caractères : pointeurs et tableaux à la fois !
3.11. Allocation dynamique de mémoire
3.12. Pointeurs et références de fonctions
3.13. Paramètres de la fonction main - ligne de commande
3.14. DANGER
4. Comment faire du code illisible ?
4.1. De nouveaux opérateurs
4.2. Quelques conseils
5. Le préprocesseur C
5.1. Définition
5.2. Les commandes du préprocesseur
5.3. Les macros
5.4. Manipulation de chaînes de caractères dans les macros
5.5. Les trigraphes
6. Modularité
6.1. Pourquoi faire une programmation modulaire ?
6.2. Étapes impliquées dans la génération d'un exécutable
6.3. Compilation séparée en C/C++
6.4. Syntaxe des outils de compilation
6.5. Problèmes syntaxiques relatifs à la compilation séparée
7. C++ : la couche objet
7.1. Généralités
7.2. Extension de la notion de type du C
7.3. Déclaration de classes en C++
7.4. Encapsulation des données
7.5. Héritage
7.6. Classes virtuelles
7.7. Fonctions et classes amies
7.8. Constructeurs et destructeurs
7.9. Pointeur this
7.10. Données et fonctions membres statiques
7.11. Redéfinition des opérateurs
7.12. Des entrées - sorties simplifiées
7.13. Méthodes virtuelles
7.14. Dérivation
7.15. Méthodes virtuelles pures - Classes abstraites
7.16. Pointeurs sur les membres d'une classe
8. Les exceptions en C++
8.1. Lancement et récupération d'une exception
8.2. Remontée des exceptions
8.3. Liste des exceptions autorisées pour une fonction
8.4. Hiérarchie des exceptions
8.5. Exceptions dans les constructeurs
9. Identification dynamique des types
9.1. Identification dynamique des types
9.2. Transtypages C++
10. Espaces de nommage
10.1. Définition des espaces de nommage
10.2. Déclaration using
10.3. Directive using
11. Les template
11.1. Généralités
11.2. Déclaration des paramètres template
11.3. Fonctions et classes template
11.4. Instanciation des template
11.5. Spécialisation des template
11.6. Mot-clé typename
11.7. Fonctions exportées
II. La librairie standard C++
12. Services et notions de base de la librairie standard
12.1. Encapsulation de la librairie C standard
12.2. Définition des exceptions standards
12.3. Abstraction des types de données : les traits
12.4. Abstraction des pointeurs : les itérateurs
12.5. Abstraction des fonctions : les foncteurs
12.6. Gestion personnalisée de la mémoire : les allocateurs
12.7. Notion de complexité algorithmique
13. Les types complémentaires
13.1. Les chaînes de caractères
13.2. Les types utilitaires
13.3. Les types numériques
14. Les flux d'entrée / sortie
14.1. Notions de base et présentation générale
14.2. Les tampons
14.3. Les classes de base des flux : ios_base et basic_ios
14.4. Les flux d'entrée / sortie
14.5. Les flux d'entrée / sortie sur chaînes de caractères
14.6. Les flux d'entrée / sortie sur fichiers
15. Les locales
15.1. Notions de base et principe de fonctionnement des facettes
15.2. Les facettes standards
15.3. Personnalisation des mécanismes de localisation
16. Les conteneurs
16.1. Fonctionnalités générales des conteneurs
16.2. Les séquences
16.3. Les conteneurs associatifs
17. Les algorithmes
17.1. Opérations générales de manipulation des données
17.2. Opérations de recherche
17.3. Opérations d'ordonnancement
17.4. Opérations de comparaison
17.5. Opérations ensemblistes
18. Conclusion
A. Priorités des opérateurs
B. Draft Papers
C. GNU Free Documentation License
D. Licence de documentation libre GNU
BIBLIOGRAPHIE
Liste des tableaux
1-1. Types pour les chaînes de format de printf
1-2. Options pour les types des chaînes de format
2-1. Opérateurs de comparaison
2-2. Opérateurs logiques
5-1. Trigraphes
7-1. Droits d'accès sur les membres hérités
13-1. Fonctions de recherche dans les chaînes de caractères
13-2. Fonctions spécifiques aux complexes
14-1. Options de formatage des flux
14-2. Modes d'ouverture des fichiers
14-3. Directions de déplacement dans un fichier
14-4. États des flux d'entrée / sortie
14-5. Manipulateurs des flux de sortie
14-6. Manipulateurs utilisant des paramètres
14-7. Manipulateurs des flux d'entrée
16-1. Méthodes spécifiques aux listes
A-1. Opérateurs du langage
Liste des exemples
1-1. Commentaire C
1-2. Commentaire C++
1-3. Types signés et non signés
1-4. Notation des entiers en base 10
1-5. Notation des entiers en base 16
1-6. Notation des entiers en base 8
1-7. Notation des réels
1-8. Déclaration de variables
1-9. Déclaration d'un tableau
1-10. Instruction vide
1-11. Affectation multiple
1-12. Affectation composée
1-13. Instruction composée
1-14. Définition de fonction
1-15. Définition de procédure
1-16. Appel de fonction
1-17. Déclaration de fonction
1-18. Surcharge de fonctions
1-19. Fonction inline
1-20. Fonction statique
1-21. Fonction à nombre de paramètres variable
1-22. Programme minimal
1-23. Utilisation de printf et fprintf
1-24. Programme complet simple
2-1. Test conditionnel if
2-2. Boucle for
2-3. Boucle while
2-4. Boucle do
2-5. Branchement conditionnel switch
2-6. Rupture de séquence par continue
2-7. Déclaration de variable de type structure
2-8. Déclaration de structure
2-9. Déclaration d'une union
2-10. Union avec discriminant
2-11. Déclaration d'une énumération
2-12. Déclaration d'un champs de bits
2-13. Initialisation d'une structure
2-14. Définition de type simple
2-15. Définition de type tableau
2-16. Définition de type structure
2-17. Transtypage en C
2-18. Déclaration d'une variable locale statique
2-19. Déclaration d'une variable constante
2-20. Déclaration de constante externes
2-21. Utilisation du mot-clé mutable
3-1. Déclaration de pointeurs
3-2. Utilisation de pointeurs de structures
3-3. Déclaration de références
3-4. Passage de paramètre par valeur
3-5. Passage de paramètre par variable en Pascal
3-6. Passage de paramètre par variable en C
3-7. Passage de paramètre par référence en C++
3-8. Arithmétique des pointeurs
3-9. Accès aux éléments d'un tableau par pointeurs
3-10. Passage de tableau en paramètre
3-11. Passage de paramètres constant par référence
3-12. Création d'un objet temporaire lors d'un passage par référence
3-13. Allocation dynamique de mémoire en C
3-14. Déclaration de pointeur de fonction
3-15. Déréférencement de pointeur de fonction
3-16. Application des pointeurs de fonctions
3-17. Récupération de la ligne de commande
4-1. Programme parfaitement illisible
5-1. Définition de constantes
5-2. Macros MIN et MAX
6-1. Compilation d'un fichier et édition de liens
6-2. Fichier makefile sans dépendances
6-3. Fichier makefile avec dépendances
6-4. Déclarations utilisables en C et en C++
7-1. Déclaration de méthode de classe
7-2. Opérateur de résolution de portée
7-3. Utilisation des champs d'une classe dans une de ses méthodes
7-4. Utilisation du mot-clé class
7-5. Héritage public, privé et protégé
7-6. Opérateur de résolution de portée et membre de classes de base
7-7. Classes virtuelles
7-8. Fonctions amies
7-9. Classe amie
7-10. Constructeurs et destructeurs
7-11. Appel du constructeur des classes de base
7-12. Mot-clé explicit
7-13. Donnée membre statique
7-14. Fonction membre statique
7-15. Appel de fonction membre statique
7-16. Redéfinition des opérateurs
7-17. Surcharge d'opérateur externe
7-18. Opérateurs d'incrémentation et de décrémentation
7-19. Détermination de la taille de l'en-tête des tableaux
7-20. Opérateurs new avec placement
7-21. Utilisation de new sans exception
7-22. Implémentation de la classe matrice
7-23. Opérateur de déréférencement et d'indirection
7-24. Flux d'entrée / sortie cin et cout
7-25. Surcharge de méthode de classe de base
7-26. Conteneur d'objets polymorphiques
7-27. Pointeurs sur membres statiques
8-1. Utilisation des exceptions
8-2. Installation d'un gestionnaire d'exception avec set_terminate
8-3. Gestion de la liste des exceptions autorisées
8-4. Classification des exceptions
8-5. Exceptions dans les constructeurs
9-1. Opérateur typeid
9-2. Opérateur dynamic_cast
10-1. Extension de namespace
10-2. Accès aux membres d'un namespace
10-3. Définition externe d'une fonction de namespace
10-4. Définition de namespace dans un namespace
10-5. Définition de namespace anonyme
10-6. Ambiguïtés entre namespaces
10-7. Déclaration using
10-8. Déclarations using multiples
10-9. Extension de namespace après une déclaration using
10-10. Conflit entre déclarations using et identificateurs locaux
10-11. Déclaration using dans une classe
10-12. Rétablissement de droits d'accès à l'aide d'une directive using
10-13. Directive using
10-14. Extension de namespace après une directive using
10-15. Conflit entre directive using et identificateurs locaux
11-1. Déclaration de paramètres template
11-2. Déclaration de paramètre template template
11-3. Déclaration de paramètres template de type constante
11-4. Définition de fonction template
11-5. Définition d'une pile template
11-6. Fonction membre template
11-7. Fonction membre template d'une classe template
11-8. Fonction membre template et fonction membre virtuelle
11-9. Surcharge de fonction membre par une fonction membre template
11-10. Instanciation implicite de fonction template
11-11. Instanciation explicite de classe template
11-12. Spécialisation totale
11-13. Spécialisation partielle
11-14. Spécialisation de fonction membre de classe template
11-15. Mot-clé typename
11-16. Mot-clé export
12-1. Détermination des limites d'un type
12-2. Itérateurs de flux d'entrée
12-3. Itérateur de flux de sortie
12-4. Itérateur d'insertion
12-5. Utilisation d'un itérateur inverse
12-6. Utilisation des foncteurs prédéfinis
12-7. Adaptateurs de fonctions
12-8. Réduction de foncteurs binaires
12-9. Utilisation de l'allocateur standard
13-1. Redimensionnement d'une chaîne
13-2. Réservation de mémoire dans une chaîne
13-3. Accès direct aux données d'une chaîne
13-4. Affectation de chaîne de caractères
13-5. Concaténation de chaînes de carctères
13-6. Copie de travail des données d'une basic_string
13-7. Extraction de sous-chaîne
13-8. Insertion de caractères dans une chaîne
13-9. Suppression de caractères dans une chaîne
13-10. Remplacement d'une sous-chaîne dans une chaîne
13-11. Échange du contenu de deux chaînes de caractères
13-12. Comparaisons de chaînes de caractères
13-13. Recherches dans les chaînes de caractères
13-14. Lecture de lignes sur le flux d'entrée
13-15. Utilisation des pointeurs automatiques
13-16. Sortie d'un pointeur d'un auto_ptr
13-17. Utilisation des paires
13-18. Manipulation des nombres complexes
13-19. Modification de la taille d'un valarray
13-20. Opérations sur les valarray
13-21. Décalages et rotations de valeurs
13-22. Sélection des éléments d'un valarray par un masque
13-23. Sélection des éléments d'un valarray par indexation
13-24. Sélection par indexation implicite
13-25. Utilisation d'un bitset
13-26. Manipulation des bits d'un champ de bits
14-1. Lecture et écriture dans un tampon de chaîne de caractères
14-2. Lecture et écriture dans un tampon de fichier
14-3. Modification des options de formatage des flux
14-4. Définition d'un nouvel opérateur << pour un flux de sortie
14-5. Écriture de données brutes sur un flux de sortie
14-6. Utilisation des manipulateurs sur un flux de sortie
14-7. Écriture d'un nouvel opérateur >> pour un flux d'entrée
14-8. Lectures de lignes sur le flux d'entrée standard
14-9. Utilisation de flux d'entrée / sortie sur chaînes de caractères
14-10. Utilisation de flux d'entrée / sortie sur un fichier
14-11. Repositionnement du pointeur de fichier dans un flux d'entrée / sortie
16-1. Construction et initialisation d'une liste
16-2. Insertion d'éléments dans une liste
16-3. Accès à la tête et à la queue d'une liste
16-4. Manipulation de listes
16-5. Accès aux éléments d'un vecteur
16-6. Utilisation d'une pile
16-7. Utilisation d'une file
16-8. Utilisation d'une file de priorité
16-9. Construction et initialisation d'une association simple
16-10. Insertion et suppression d'éléments d'une association
16-11. Recherche dans une association
17-1. Algorithme de génération d'objets et de remplissage d'un conteneur
17-2. Algorithme de copie inverse
17-3. Algorithme d'échange
17-4. Algorithme de suppression
17-5. Algorithme de suppression des doublons
17-6. Algorithme de recherche et de remplacement
17-7. Algorithme de rotation
17-8. Algorithme de permutation
17-9. Algorithme d'inversion
17-10. Algorithme de mélange
17-11. Algorithmes d'itération
17-12. Algorithme de décompte d'éléments
17-13. Algorithme d'accumulation
17-14. Algorithme de produit scalaire
17-15. Algorithmes de sommes partielles et de différences adjacentes
17-16. Algorithme de recherche d'éléments
17-17. Algorithmes de recherche de motif
17-18. Algorithme de recherche de doublons
17-19. Algorithmes de manipulation des tas
17-20. Algorithme de tri
17-21. Algorithme de tri partiel
17-22. Algorithme de positionnement du nième élément
17-23. Algorithmes de détermination du maximum et du minimum
17-24. Algorithmes de détermination des bornes inférieures et supérieures
17-25. Algorithme de recherche binaire
17-26. Algorithme de comparaison de conteneurs
17-27. Algorithme de comparaison lexicographique
17-28. Algorithme de détermination d'inclusion
17-29. Algorithme d'intersection d'ensembles
17-30. Algorithmes d'union et de fusion d'ensembles
17-31. Algorithme de réunification de deux sous-ensembles
17-32. Algorithmes de différence d'ensembles
17-33. Algorithme de partitionnement