1. Première approche du C/C++.................................................................................................. 1
1.1. Les commentaires en C++.......................................................................................... 2
1.2. Les types prédéfinis du C/C++ ................................................................................... 2
1.3. Notation des valeurs ................................................................................................... 5
1.4. La définition des variables.......................................................................................... 7
1.5. Instructions et opérations............................................................................................ 9
1.6. Les fonctions ............................................................................................................ 12
1.6.1. Définition des fonctions ............................................................................... 12
1.6.2. Appel des fonctions...................................................................................... 13
1.6.3. Déclaration des fonctions............................................................................. 13
1.6.4. Surcharge des fonctions ............................................................................... 14
1.6.5. Fonctions inline............................................................................................ 15
1.6.6. Fonctions statiques....................................................................................... 16
1.6.7. Fonctions prenant un nombre variable de paramètres ................................. 16
1.7. La fonction main....................................................................................................... 18
1.8. Les fonctions d’entrée / sortie de base ..................................................................... 19
1.8.1. Généralités sur les flux d’entrée / sortie en C .............................................. 19
1.8.2. La fonction printf ......................................................................................... 21
1.8.3. La fonction scanf.......................................................................................... 23
1.9. Exemple de programme complet.............................................................................. 24
2. Les structures de contrôle ..................................................................................................... 25
2.1. La structure conditionnelle if.................................................................................... 25
2.2. La boucle for............................................................................................................. 26
2.3. Le while .................................................................................................................... 27
2.4. Le do......................................................................................................................... 27
2.5. Le branchement conditionnel ................................................................................... 28
2.6. Le saut ...................................................................................................................... 29
2.7. Les commandes de rupture de séquence .................................................................. 29
3. Types avancés et classes de stockage .................................................................................... 31
3.1. Structures de données et types complexes................................................................ 31
3.1.1. Les structures ............................................................................................... 31
3.1.2. Les unions .................................................................................................... 33
3.1.3. Les énumérations ......................................................................................... 34
3.1.4. Les champs de bits ....................................................................................... 35
3.1.5. Initialisation des structures et des tableaux.................................................. 36
3.1.6. Les alias de types ......................................................................................... 37
3.1.7. Transtypages ................................................................................................ 38
3.2. Les classes de stockage ............................................................................................ 38
4. Les pointeurs et références.................................................................................................... 43
4.1. Notion d’adresse....................................................................................................... 43
4.2. Notion de pointeur.................................................................................................... 43
4.3. Déréférencement, indirection ................................................................................... 44
4.4. Notion de référence .................................................................................................. 46
4.5. Lien entre les pointeurs et les références.................................................................. 46
4.6. Passage de paramètres par variable ou par valeur .................................................... 47
4.6.1. Passage par valeur........................................................................................ 47
4.6.2. Passage par variable ..................................................................................... 48
4.6.3. Avantages et inconvénients des deux méthodes........................................... 48
4.6.4. Comment passer les paramètres par variable en C ?.................................... 49
4.6.5. Passage de paramètres par référence............................................................ 49
4.7. Références et pointeurs constants et volatiles .......................................................... 51
4.8. Arithmétique des pointeurs....................................................................................... 54
4.9. Utilisation des pointeurs avec les tableaux............................................................... 55
4.9.1. Conversions des tableaux en pointeurs ........................................................ 55
4.9.2. Paramètres de fonction de type tableau ....................................................... 56
4.10. Les chaînes de caractères : pointeurs et tableaux à la fois ! ................................... 57
4.11. Allocation dynamique de mémoire ........................................................................ 58
4.11.1. Allocation dynamique de mémoire en C ................................................... 58
4.11.2. Allocation dynamique en C++................................................................... 63
4.12. Pointeurs et références de fonctions ....................................................................... 65
4.12.1. Pointeurs de fonctions................................................................................ 65
4.12.2. Références de fonctions ............................................................................. 67
4.13. Paramètres de la fonction main - ligne de commande............................................ 68
4.14. DANGER................................................................................................................ 69
5. Le préprocesseur C................................................................................................................ 71
5.1. Définition.................................................................................................................. 71
5.2. Les commandes du préprocesseur ............................................................................ 71
5.2.1. Inclusion de fichier....................................................................................... 71
5.2.2. Constantes de compilation et remplacement de texte .................................. 72
5.2.3. Compilation conditionnelle.......................................................................... 73
5.2.4. Autres commandes....................................................................................... 74
5.3. Les macros................................................................................................................ 74
5.4. Manipulation de chaînes de caractères dans les macros........................................... 76
5.5. Les trigraphes ........................................................................................................... 77
6. Modularité des programmes et génération des binaires........................................................ 79
6.1. Pourquoi faire une programmation modulaire ?....................................................... 79
6.2. Les différentes phases du processus de génération des exécutables......................... 79
6.3. Compilation séparée en C/C++ ................................................................................ 82
6.4. Syntaxe des outils de compilation ............................................................................ 83
6.4.1. Syntaxe des compilateurs............................................................................. 83
6.4.2. Syntaxe de make .......................................................................................... 84
6.5. Problèmes syntaxiques relatifs à la compilation séparée ......................................... 85
6.5.1. Déclaration des types ................................................................................... 85
6.5.2. Déclaration des variables ............................................................................. 86
6.5.3. Déclaration des fonctions............................................................................. 86
6.5.4. Directives d’édition de liens ........................................................................ 86
7. Comment faire du code illisible ? ......................................................................................... 89
8. C++ : la couche objet ............................................................................................................ 91
8.1. Généralités................................................................................................................ 91
8.2. Extension de la notion de type du C......................................................................... 92
8.3. Déclaration de classes en C++.................................................................................. 92
8.4. Encapsulation des données ....................................................................................... 96
8.5. Héritage .................................................................................................................... 98
8.6. Classes virtuelles .................................................................................................... 100
8.7. Fonctions et classes amies ...................................................................................... 102
8.7.1. Fonctions amies ......................................................................................... 102
8.7.2. Classes amies ............................................................................................. 103
8.8. Constructeurs et destructeurs.................................................................................. 104
8.8.1. Définition des constructeurs et des destructeurs ........................................ 104
8.8.2. Constructeurs de copie............................................................................... 109
8.8.3. Utilisation des constructeurs dans les transtypages ................................... 110
8.9. Pointeur this............................................................................................................ 111
8.10. Données et fonctions membres statiques.............................................................. 112
8.10.1. Données membres statiques..................................................................... 112
8.10.2. Fonctions membres statiques ................................................................... 113
8.11. Surcharge des opérateurs ...................................................................................... 115
8.11.1. Surcharge des opérateurs internes............................................................ 115
8.11.2. Surcharge des opérateurs externes ........................................................... 118
8.11.3. Opérateurs d’affectation........................................................................... 120
8.11.4. Opérateurs de transtypage........................................................................ 122
8.11.5. Opérateurs de comparaison...................................................................... 122
8.11.6. Opérateurs d’incrémentation et de décrémentation ................................. 123
8.11.7. Opérateur fonctionnel .............................................................................. 123
8.11.8. Opérateurs d’indirection et de déréférencement ...................................... 126
8.11.9. Opérateurs d’allocation dynamique de mémoire ..................................... 127
8.12. Des entrées - sorties simplifiées ........................................................................... 133
8.13. Méthodes virtuelles .............................................................................................. 135
8.14. Dérivation ............................................................................................................. 137
8.15. Méthodes virtuelles pures - Classes abstraites ..................................................... 140
8.16. Pointeurs sur les membres d’une classe ............................................................... 145
9. Les exceptions en C++........................................................................................................ 149
9.1. Lancement et récupération d’une exception........................................................... 150
9.2. Remontée des exceptions........................................................................................ 152
9.3. Liste des exceptions autorisées pour une fonction ................................................. 154
9.4. Hiérarchie des exceptions....................................................................................... 155
9.5. Exceptions dans les constructeurs .......................................................................... 157
10. Identification dynamique des types................................................................................... 161
10.1. Identification dynamique des types ...................................................................... 161
10.1.1. L’opérateur typeid .................................................................................... 161
10.1.2. La classe type_info .................................................................................. 163
10.2. Transtypages C++................................................................................................. 163
10.2.1. Transtypage dynamique ........................................................................... 164
10.2.2. Transtypage statique ................................................................................ 166
10.2.3. Transtypage de constance et de volatilité................................................. 167
10.2.4. Réinterprétation des données ................................................................... 167
11. Les espaces de nommage .................................................................................................. 169
11.1. Définition des espaces de nommage..................................................................... 169
11.1.1. Espaces de nommage nommées............................................................... 169
11.1.2. Espaces de nommage anonymes.............................................................. 171
11.1.3. Alias d’espaces de nommage................................................................... 172
11.2. Déclaration using.................................................................................................. 172
11.2.1. Syntaxe des déclarations using ................................................................ 172
11.2.2. Utilisation des déclarations using dans les classes .................................. 174
11.3. Directive using...................................................................................................... 175
12. Les template ...................................................................................................................... 179
12.1. Généralités............................................................................................................ 179
12.2. Déclaration des paramètres template.................................................................... 179
12.2.1. Déclaration des types template ................................................................ 179
12.2.2. Déclaration des constantes template ........................................................ 180
12.3. Fonctions et classes template................................................................................ 181
12.3.1. Fonctions template ................................................................................... 181
12.3.2. Les classes template................................................................................. 182
12.3.3. Fonctions membres template ................................................................... 185
12.4. Instanciation des template .................................................................................... 188
12.4.1. Instanciation implicite.............................................................................. 188
12.4.2. Instanciation explicite .............................................................................. 189
12.4.3. Problèmes soulevés par l’instanciation des template............................... 190
12.5. Spécialisation des template................................................................................... 191
12.5.1. Spécialisation totale ................................................................................. 191
12.5.2. Spécialisation partielle ............................................................................. 192
12.5.3. Spécialisation d’une méthode d’une classe template............................... 194
12.6. Mot-clé typename................................................................................................. 195
12.7. Fonctions exportées .............................................................................................. 196
II. La bibliothèque standard C++ ................................................................................................. 197
13. Services et notions de base de la bibliothèque standard ................................................... 199
13.1. Encapsulation de la bibliothèque C standard........................................................ 199
13.2. Définition des exceptions standards ..................................................................... 201
13.3. Abstraction des types de données : les traits ........................................................ 204
13.4. Abstraction des pointeurs : les itérateurs.............................................................. 206
13.4.1. Notions de base et définition.................................................................... 206
13.4.2. Classification des itérateurs...................................................................... 207
13.4.3. Itérateurs adaptateurs ............................................................................... 209
13.4.3.1. Adaptateurs pour les flux d’entrée / sortie standards .................. 210
13.4.3.2. Adaptateurs pour l’insertion d’éléments dans les conteneurs ..... 212
13.4.3.3. Itérateur inverse pour les itérateurs bidirectionnels..................... 215
13.5. Abstraction des fonctions : les foncteurs.............................................................. 217
13.5.1. Foncteurs prédéfinis ................................................................................. 217
13.5.2. Prédicats et foncteurs d’opérateurs logiques............................................ 222
13.5.3. Foncteurs réducteurs ................................................................................ 223
13.6. Gestion personnalisée de la mémoire : les allocateurs ......................................... 225
13.7. Notion de complexité algorithmique .................................................................... 229
13.7.1. Généralités ............................................................................................... 229
13.7.2. Notions mathématiques de base et définition........................................... 230
13.7.3. Interprétation pratique de la complexité .................................................. 231
14. Les types complémentaires ............................................................................................... 233
14.1. Les chaînes de caractères...................................................................................... 233
14.1.1. Construction et initialisation d’une chaîne .............................................. 237
14.1.2. Accès aux propriétés d’une chaîne .......................................................... 238
14.1.3. Modification de la taille des chaînes........................................................ 239
14.1.4. Accès aux données de la chaîne de caractères ......................................... 240
14.1.5. Opérations sur les chaînes........................................................................ 242
14.1.5.1. Affectation et concaténation de chaînes de caractères ................ 242
14.1.5.2. Extraction de données d’une chaîne de caractères ...................... 244
14.1.5.3. Insertion et suppression de caractères dans une chaîne............... 245
14.1.5.4. Remplacements de caractères d’une chaîne ................................ 246
14.1.6. Comparaison de chaînes de caractères..................................................... 248
14.1.7. Recherche dans les chaînes...................................................................... 249
14.1.8. Fonctions d’entrée / sortie des chaînes de caractères............................... 251
14.2. Les types utilitaires............................................................................................... 252
14.2.1. Les pointeurs auto .................................................................................... 252
14.2.2. Les paires ................................................................................................. 255
14.3. Les types numériques ........................................................................................... 256
14.3.1. Les complexes.......................................................................................... 257
14.3.1.1. Définition et principales propriétés des nombres complexes ...... 257
14.3.1.2. La classe complex ....................................................................... 259
14.3.2. Les tableaux de valeurs ............................................................................ 262
14.3.2.1. Fonctionnalités de base des valarray ........................................... 263
14.3.2.2. Sélection multiple des éléments d’un valarray............................ 267
14.3.2.2.1. Sélection par un masque ................................................. 267
14.3.2.2.2. Sélection par indexation explicite................................... 268
14.3.2.2.3. Sélection par indexation implicite .................................. 269
14.3.2.2.4. Opérations réalisables sur les sélections multiples......... 271
14.3.3. Les champs de bits ................................................................................... 272
15. Les flux d’entrée / sortie.................................................................................................... 277
15.1. Notions de base et présentation générale.............................................................. 277
15.2. Les tampons.......................................................................................................... 279
15.2.1. Généralités sur les tampons ..................................................................... 279
15.2.2. La classe basic_streambuf........................................................................ 280
15.2.3. Les classes de tampons basic_streambuf et basic_filebuf........................ 285
15.2.3.1. La classe basic_stringbuf............................................................. 286
15.2.3.2. La classe basic_filebuf................................................................. 288
15.3. Les classes de base des flux : ios_base et basic_ios ............................................. 289
15.3.1. La classe ios_base .................................................................................... 290
15.3.2. La classe basic_ios................................................................................... 296
15.4. Les flux d’entrée / sortie ....................................................................................... 299
15.4.1. La classe de base basic_ostream .............................................................. 299
15.4.2. La classe de base basic_istream............................................................... 305
15.4.3. La classe basic_iostream.......................................................................... 311
15.5. Les flux d’entrée / sortie sur chaînes de caractères .............................................. 312
15.6. Les flux d’entrée / sortie sur fichiers .................................................................... 313
16. Les locales......................................................................................................................... 317
16.1. Notions de base et principe de fonctionnement des facettes ................................ 318
16.2. Les facettes standards ........................................................................................... 323
16.2.1. Généralités ............................................................................................... 323
16.2.2. Les facettes de manipulation des caractères ............................................ 324
16.2.2.1. La facette ctype ........................................................................... 324
16.2.2.2. La facette codecvt........................................................................ 328
16.2.3. Les facettes de comparaison de chaînes................................................... 332
16.2.4. Les facettes de gestion des nombres ........................................................ 335
16.2.4.1. La facette num_punct .................................................................. 335
16.2.4.2. La facette d’écriture des nombres ............................................... 337
16.2.4.3. La facette de lecture des nombres ............................................... 338
16.2.5. Les facettes de gestion des monnaies....................................................... 339
16.2.5.1. La facette money_punct .............................................................. 340
16.2.5.2. Les facettes de lecture et d’écriture des montants....................... 342
16.2.6. Les facettes de gestion du temps.............................................................. 343
16.2.6.1. La facette d’écriture des dates ..................................................... 345
16.2.6.2. La facette de lecture des dates..................................................... 345
16.2.7. Les facettes de gestion des messages....................................................... 347
16.3. Personnalisation des mécanismes de localisation................................................. 349
16.3.1. Création et intégration d’une nouvelle facette ......................................... 349
16.3.2. Remplacement d’une facette existante..................................................... 353
17. Les conteneurs................................................................................................................... 357
17.1. Fonctionnalités générales des conteneurs............................................................. 357
17.1.1. Définition des itérateurs ........................................................................... 358
17.1.2. Définition des types de données relatifs aux objets contenus .................. 359
17.1.3. Spécification de l’allocateur mémoire à utiliser....................................... 359
17.1.4. Opérateurs de comparaison des conteneurs ............................................. 360
17.1.5. Méthodes d’intérêt général ...................................................................... 361
17.2. Les séquences ....................................................................................................... 361
17.2.1. Fonctionnalités communes....................................................................... 361
17.2.1.1. Construction et initialisation ....................................................... 361
17.2.1.2. Ajout et suppression d’éléments ................................................. 363
17.2.2. Les différents types de séquences ............................................................ 364
17.2.2.1. Les listes ...................................................................................... 365
17.2.2.2. Les vecteurs................................................................................. 368
17.2.2.3. Les deques ................................................................................... 370
17.2.2.4. Les adaptateurs de séquences...................................................... 371
17.2.2.4.1. Les piles .......................................................................... 371
17.2.2.4.2. Les files........................................................................... 372
17.2.2.4.3. Les files de priorités........................................................ 372
17.3. Les conteneurs associatifs .................................................................................... 374
17.3.1. Généralités et propriétés de base des clefs............................................... 375
17.3.2. Construction et initialisation .................................................................... 376
17.3.3. Ajout et suppression d’éléments .............................................................. 377
17.3.4. Fonctions de recherche ............................................................................ 379
18. Les algorithmes ................................................................................................................. 385
18.1. Opérations générales de manipulation des données ............................................. 385
18.1.1. Opérations d’initialisation et de remplissage........................................... 386
18.1.2. Opérations de copie.................................................................................. 387
18.1.3. Opérations d’échange d’éléments ............................................................ 388
18.1.4. Opérations de suppression d’éléments..................................................... 389
18.1.5. Opérations de remplacement.................................................................... 391
18.1.6. Réorganisation de séquences ................................................................... 392
18.1.6.1. Opérations de rotation et de permutation .................................... 393
18.1.6.2. Opérations d’inversion ................................................................ 394
18.1.6.3. Opérations de mélange ................................................................ 395
18.1.7. Algorithmes d’itération et de transformation........................................... 396
18.2. Opérations de recherche ....................................................................................... 401
18.2.1. Opération de recherche d’éléments.......................................................... 401
18.2.2. Opérations de recherche de motifs........................................................... 403
18.3. Opérations d’ordonnancement.............................................................................. 405
18.3.1. Opérations de gestion des tas................................................................... 406
18.3.2. Opérations de tri....................................................................................... 408
18.3.3. Opérations de recherche binaire............................................................... 412
18.4. Opérations de comparaison .................................................................................. 415
18.5. Opérations ensemblistes ....................................................................................... 417
18.5.1. Opérations d’inclusion............................................................................. 417
18.5.2. Opérations d’intersection ......................................................................... 418
18.5.3. Opérations d’union et de fusion............................................................... 420
18.5.4. Opérations de différence .......................................................................... 422
18.5.5. Opérations de partitionnement................................................................. 424
19. Conclusion ................................................................................................................................. 427
A. Priorités des opérateurs............................................................................................................. 429
B. Draft Papers................................................................................................................................ 431
C. GNU Free Documentation License........................................................................................... 433
D. Licence de documentation libre GNU...................................................................................... 439
BIBLIOGRAPHIE ......................................................................................................................... 445
1.1. Les commentaires en C++.......................................................................................... 2
1.2. Les types prédéfinis du C/C++ ................................................................................... 2
1.3. Notation des valeurs ................................................................................................... 5
1.4. La définition des variables.......................................................................................... 7
1.5. Instructions et opérations............................................................................................ 9
1.6. Les fonctions ............................................................................................................ 12
1.6.1. Définition des fonctions ............................................................................... 12
1.6.2. Appel des fonctions...................................................................................... 13
1.6.3. Déclaration des fonctions............................................................................. 13
1.6.4. Surcharge des fonctions ............................................................................... 14
1.6.5. Fonctions inline............................................................................................ 15
1.6.6. Fonctions statiques....................................................................................... 16
1.6.7. Fonctions prenant un nombre variable de paramètres ................................. 16
1.7. La fonction main....................................................................................................... 18
1.8. Les fonctions d’entrée / sortie de base ..................................................................... 19
1.8.1. Généralités sur les flux d’entrée / sortie en C .............................................. 19
1.8.2. La fonction printf ......................................................................................... 21
1.8.3. La fonction scanf.......................................................................................... 23
1.9. Exemple de programme complet.............................................................................. 24
2. Les structures de contrôle ..................................................................................................... 25
2.1. La structure conditionnelle if.................................................................................... 25
2.2. La boucle for............................................................................................................. 26
2.3. Le while .................................................................................................................... 27
2.4. Le do......................................................................................................................... 27
2.5. Le branchement conditionnel ................................................................................... 28
2.6. Le saut ...................................................................................................................... 29
2.7. Les commandes de rupture de séquence .................................................................. 29
3. Types avancés et classes de stockage .................................................................................... 31
3.1. Structures de données et types complexes................................................................ 31
3.1.1. Les structures ............................................................................................... 31
3.1.2. Les unions .................................................................................................... 33
3.1.3. Les énumérations ......................................................................................... 34
3.1.4. Les champs de bits ....................................................................................... 35
3.1.5. Initialisation des structures et des tableaux.................................................. 36
3.1.6. Les alias de types ......................................................................................... 37
3.1.7. Transtypages ................................................................................................ 38
3.2. Les classes de stockage ............................................................................................ 38
4. Les pointeurs et références.................................................................................................... 43
4.1. Notion d’adresse....................................................................................................... 43
4.2. Notion de pointeur.................................................................................................... 43
4.3. Déréférencement, indirection ................................................................................... 44
4.4. Notion de référence .................................................................................................. 46
4.5. Lien entre les pointeurs et les références.................................................................. 46
4.6. Passage de paramètres par variable ou par valeur .................................................... 47
4.6.1. Passage par valeur........................................................................................ 47
4.6.2. Passage par variable ..................................................................................... 48
4.6.3. Avantages et inconvénients des deux méthodes........................................... 48
4.6.4. Comment passer les paramètres par variable en C ?.................................... 49
4.6.5. Passage de paramètres par référence............................................................ 49
4.7. Références et pointeurs constants et volatiles .......................................................... 51
4.8. Arithmétique des pointeurs....................................................................................... 54
4.9. Utilisation des pointeurs avec les tableaux............................................................... 55
4.9.1. Conversions des tableaux en pointeurs ........................................................ 55
4.9.2. Paramètres de fonction de type tableau ....................................................... 56
4.10. Les chaînes de caractères : pointeurs et tableaux à la fois ! ................................... 57
4.11. Allocation dynamique de mémoire ........................................................................ 58
4.11.1. Allocation dynamique de mémoire en C ................................................... 58
4.11.2. Allocation dynamique en C++................................................................... 63
4.12. Pointeurs et références de fonctions ....................................................................... 65
4.12.1. Pointeurs de fonctions................................................................................ 65
4.12.2. Références de fonctions ............................................................................. 67
4.13. Paramètres de la fonction main - ligne de commande............................................ 68
4.14. DANGER................................................................................................................ 69
5. Le préprocesseur C................................................................................................................ 71
5.1. Définition.................................................................................................................. 71
5.2. Les commandes du préprocesseur ............................................................................ 71
5.2.1. Inclusion de fichier....................................................................................... 71
5.2.2. Constantes de compilation et remplacement de texte .................................. 72
5.2.3. Compilation conditionnelle.......................................................................... 73
5.2.4. Autres commandes....................................................................................... 74
5.3. Les macros................................................................................................................ 74
5.4. Manipulation de chaînes de caractères dans les macros........................................... 76
5.5. Les trigraphes ........................................................................................................... 77
6. Modularité des programmes et génération des binaires........................................................ 79
6.1. Pourquoi faire une programmation modulaire ?....................................................... 79
6.2. Les différentes phases du processus de génération des exécutables......................... 79
6.3. Compilation séparée en C/C++ ................................................................................ 82
6.4. Syntaxe des outils de compilation ............................................................................ 83
6.4.1. Syntaxe des compilateurs............................................................................. 83
6.4.2. Syntaxe de make .......................................................................................... 84
6.5. Problèmes syntaxiques relatifs à la compilation séparée ......................................... 85
6.5.1. Déclaration des types ................................................................................... 85
6.5.2. Déclaration des variables ............................................................................. 86
6.5.3. Déclaration des fonctions............................................................................. 86
6.5.4. Directives d’édition de liens ........................................................................ 86
7. Comment faire du code illisible ? ......................................................................................... 89
8. C++ : la couche objet ............................................................................................................ 91
8.1. Généralités................................................................................................................ 91
8.2. Extension de la notion de type du C......................................................................... 92
8.3. Déclaration de classes en C++.................................................................................. 92
8.4. Encapsulation des données ....................................................................................... 96
8.5. Héritage .................................................................................................................... 98
8.6. Classes virtuelles .................................................................................................... 100
8.7. Fonctions et classes amies ...................................................................................... 102
8.7.1. Fonctions amies ......................................................................................... 102
8.7.2. Classes amies ............................................................................................. 103
8.8. Constructeurs et destructeurs.................................................................................. 104
8.8.1. Définition des constructeurs et des destructeurs ........................................ 104
8.8.2. Constructeurs de copie............................................................................... 109
8.8.3. Utilisation des constructeurs dans les transtypages ................................... 110
8.9. Pointeur this............................................................................................................ 111
8.10. Données et fonctions membres statiques.............................................................. 112
8.10.1. Données membres statiques..................................................................... 112
8.10.2. Fonctions membres statiques ................................................................... 113
8.11. Surcharge des opérateurs ...................................................................................... 115
8.11.1. Surcharge des opérateurs internes............................................................ 115
8.11.2. Surcharge des opérateurs externes ........................................................... 118
8.11.3. Opérateurs d’affectation........................................................................... 120
8.11.4. Opérateurs de transtypage........................................................................ 122
8.11.5. Opérateurs de comparaison...................................................................... 122
8.11.6. Opérateurs d’incrémentation et de décrémentation ................................. 123
8.11.7. Opérateur fonctionnel .............................................................................. 123
8.11.8. Opérateurs d’indirection et de déréférencement ...................................... 126
8.11.9. Opérateurs d’allocation dynamique de mémoire ..................................... 127
8.12. Des entrées - sorties simplifiées ........................................................................... 133
8.13. Méthodes virtuelles .............................................................................................. 135
8.14. Dérivation ............................................................................................................. 137
8.15. Méthodes virtuelles pures - Classes abstraites ..................................................... 140
8.16. Pointeurs sur les membres d’une classe ............................................................... 145
9. Les exceptions en C++........................................................................................................ 149
9.1. Lancement et récupération d’une exception........................................................... 150
9.2. Remontée des exceptions........................................................................................ 152
9.3. Liste des exceptions autorisées pour une fonction ................................................. 154
9.4. Hiérarchie des exceptions....................................................................................... 155
9.5. Exceptions dans les constructeurs .......................................................................... 157
10. Identification dynamique des types................................................................................... 161
10.1. Identification dynamique des types ...................................................................... 161
10.1.1. L’opérateur typeid .................................................................................... 161
10.1.2. La classe type_info .................................................................................. 163
10.2. Transtypages C++................................................................................................. 163
10.2.1. Transtypage dynamique ........................................................................... 164
10.2.2. Transtypage statique ................................................................................ 166
10.2.3. Transtypage de constance et de volatilité................................................. 167
10.2.4. Réinterprétation des données ................................................................... 167
11. Les espaces de nommage .................................................................................................. 169
11.1. Définition des espaces de nommage..................................................................... 169
11.1.1. Espaces de nommage nommées............................................................... 169
11.1.2. Espaces de nommage anonymes.............................................................. 171
11.1.3. Alias d’espaces de nommage................................................................... 172
11.2. Déclaration using.................................................................................................. 172
11.2.1. Syntaxe des déclarations using ................................................................ 172
11.2.2. Utilisation des déclarations using dans les classes .................................. 174
11.3. Directive using...................................................................................................... 175
12. Les template ...................................................................................................................... 179
12.1. Généralités............................................................................................................ 179
12.2. Déclaration des paramètres template.................................................................... 179
12.2.1. Déclaration des types template ................................................................ 179
12.2.2. Déclaration des constantes template ........................................................ 180
12.3. Fonctions et classes template................................................................................ 181
12.3.1. Fonctions template ................................................................................... 181
12.3.2. Les classes template................................................................................. 182
12.3.3. Fonctions membres template ................................................................... 185
12.4. Instanciation des template .................................................................................... 188
12.4.1. Instanciation implicite.............................................................................. 188
12.4.2. Instanciation explicite .............................................................................. 189
12.4.3. Problèmes soulevés par l’instanciation des template............................... 190
12.5. Spécialisation des template................................................................................... 191
12.5.1. Spécialisation totale ................................................................................. 191
12.5.2. Spécialisation partielle ............................................................................. 192
12.5.3. Spécialisation d’une méthode d’une classe template............................... 194
12.6. Mot-clé typename................................................................................................. 195
12.7. Fonctions exportées .............................................................................................. 196
II. La bibliothèque standard C++ ................................................................................................. 197
13. Services et notions de base de la bibliothèque standard ................................................... 199
13.1. Encapsulation de la bibliothèque C standard........................................................ 199
13.2. Définition des exceptions standards ..................................................................... 201
13.3. Abstraction des types de données : les traits ........................................................ 204
13.4. Abstraction des pointeurs : les itérateurs.............................................................. 206
13.4.1. Notions de base et définition.................................................................... 206
13.4.2. Classification des itérateurs...................................................................... 207
13.4.3. Itérateurs adaptateurs ............................................................................... 209
13.4.3.1. Adaptateurs pour les flux d’entrée / sortie standards .................. 210
13.4.3.2. Adaptateurs pour l’insertion d’éléments dans les conteneurs ..... 212
13.4.3.3. Itérateur inverse pour les itérateurs bidirectionnels..................... 215
13.5. Abstraction des fonctions : les foncteurs.............................................................. 217
13.5.1. Foncteurs prédéfinis ................................................................................. 217
13.5.2. Prédicats et foncteurs d’opérateurs logiques............................................ 222
13.5.3. Foncteurs réducteurs ................................................................................ 223
13.6. Gestion personnalisée de la mémoire : les allocateurs ......................................... 225
13.7. Notion de complexité algorithmique .................................................................... 229
13.7.1. Généralités ............................................................................................... 229
13.7.2. Notions mathématiques de base et définition........................................... 230
13.7.3. Interprétation pratique de la complexité .................................................. 231
14. Les types complémentaires ............................................................................................... 233
14.1. Les chaînes de caractères...................................................................................... 233
14.1.1. Construction et initialisation d’une chaîne .............................................. 237
14.1.2. Accès aux propriétés d’une chaîne .......................................................... 238
14.1.3. Modification de la taille des chaînes........................................................ 239
14.1.4. Accès aux données de la chaîne de caractères ......................................... 240
14.1.5. Opérations sur les chaînes........................................................................ 242
14.1.5.1. Affectation et concaténation de chaînes de caractères ................ 242
14.1.5.2. Extraction de données d’une chaîne de caractères ...................... 244
14.1.5.3. Insertion et suppression de caractères dans une chaîne............... 245
14.1.5.4. Remplacements de caractères d’une chaîne ................................ 246
14.1.6. Comparaison de chaînes de caractères..................................................... 248
14.1.7. Recherche dans les chaînes...................................................................... 249
14.1.8. Fonctions d’entrée / sortie des chaînes de caractères............................... 251
14.2. Les types utilitaires............................................................................................... 252
14.2.1. Les pointeurs auto .................................................................................... 252
14.2.2. Les paires ................................................................................................. 255
14.3. Les types numériques ........................................................................................... 256
14.3.1. Les complexes.......................................................................................... 257
14.3.1.1. Définition et principales propriétés des nombres complexes ...... 257
14.3.1.2. La classe complex ....................................................................... 259
14.3.2. Les tableaux de valeurs ............................................................................ 262
14.3.2.1. Fonctionnalités de base des valarray ........................................... 263
14.3.2.2. Sélection multiple des éléments d’un valarray............................ 267
14.3.2.2.1. Sélection par un masque ................................................. 267
14.3.2.2.2. Sélection par indexation explicite................................... 268
14.3.2.2.3. Sélection par indexation implicite .................................. 269
14.3.2.2.4. Opérations réalisables sur les sélections multiples......... 271
14.3.3. Les champs de bits ................................................................................... 272
15. Les flux d’entrée / sortie.................................................................................................... 277
15.1. Notions de base et présentation générale.............................................................. 277
15.2. Les tampons.......................................................................................................... 279
15.2.1. Généralités sur les tampons ..................................................................... 279
15.2.2. La classe basic_streambuf........................................................................ 280
15.2.3. Les classes de tampons basic_streambuf et basic_filebuf........................ 285
15.2.3.1. La classe basic_stringbuf............................................................. 286
15.2.3.2. La classe basic_filebuf................................................................. 288
15.3. Les classes de base des flux : ios_base et basic_ios ............................................. 289
15.3.1. La classe ios_base .................................................................................... 290
15.3.2. La classe basic_ios................................................................................... 296
15.4. Les flux d’entrée / sortie ....................................................................................... 299
15.4.1. La classe de base basic_ostream .............................................................. 299
15.4.2. La classe de base basic_istream............................................................... 305
15.4.3. La classe basic_iostream.......................................................................... 311
15.5. Les flux d’entrée / sortie sur chaînes de caractères .............................................. 312
15.6. Les flux d’entrée / sortie sur fichiers .................................................................... 313
16. Les locales......................................................................................................................... 317
16.1. Notions de base et principe de fonctionnement des facettes ................................ 318
16.2. Les facettes standards ........................................................................................... 323
16.2.1. Généralités ............................................................................................... 323
16.2.2. Les facettes de manipulation des caractères ............................................ 324
16.2.2.1. La facette ctype ........................................................................... 324
16.2.2.2. La facette codecvt........................................................................ 328
16.2.3. Les facettes de comparaison de chaînes................................................... 332
16.2.4. Les facettes de gestion des nombres ........................................................ 335
16.2.4.1. La facette num_punct .................................................................. 335
16.2.4.2. La facette d’écriture des nombres ............................................... 337
16.2.4.3. La facette de lecture des nombres ............................................... 338
16.2.5. Les facettes de gestion des monnaies....................................................... 339
16.2.5.1. La facette money_punct .............................................................. 340
16.2.5.2. Les facettes de lecture et d’écriture des montants....................... 342
16.2.6. Les facettes de gestion du temps.............................................................. 343
16.2.6.1. La facette d’écriture des dates ..................................................... 345
16.2.6.2. La facette de lecture des dates..................................................... 345
16.2.7. Les facettes de gestion des messages....................................................... 347
16.3. Personnalisation des mécanismes de localisation................................................. 349
16.3.1. Création et intégration d’une nouvelle facette ......................................... 349
16.3.2. Remplacement d’une facette existante..................................................... 353
17. Les conteneurs................................................................................................................... 357
17.1. Fonctionnalités générales des conteneurs............................................................. 357
17.1.1. Définition des itérateurs ........................................................................... 358
17.1.2. Définition des types de données relatifs aux objets contenus .................. 359
17.1.3. Spécification de l’allocateur mémoire à utiliser....................................... 359
17.1.4. Opérateurs de comparaison des conteneurs ............................................. 360
17.1.5. Méthodes d’intérêt général ...................................................................... 361
17.2. Les séquences ....................................................................................................... 361
17.2.1. Fonctionnalités communes....................................................................... 361
17.2.1.1. Construction et initialisation ....................................................... 361
17.2.1.2. Ajout et suppression d’éléments ................................................. 363
17.2.2. Les différents types de séquences ............................................................ 364
17.2.2.1. Les listes ...................................................................................... 365
17.2.2.2. Les vecteurs................................................................................. 368
17.2.2.3. Les deques ................................................................................... 370
17.2.2.4. Les adaptateurs de séquences...................................................... 371
17.2.2.4.1. Les piles .......................................................................... 371
17.2.2.4.2. Les files........................................................................... 372
17.2.2.4.3. Les files de priorités........................................................ 372
17.3. Les conteneurs associatifs .................................................................................... 374
17.3.1. Généralités et propriétés de base des clefs............................................... 375
17.3.2. Construction et initialisation .................................................................... 376
17.3.3. Ajout et suppression d’éléments .............................................................. 377
17.3.4. Fonctions de recherche ............................................................................ 379
18. Les algorithmes ................................................................................................................. 385
18.1. Opérations générales de manipulation des données ............................................. 385
18.1.1. Opérations d’initialisation et de remplissage........................................... 386
18.1.2. Opérations de copie.................................................................................. 387
18.1.3. Opérations d’échange d’éléments ............................................................ 388
18.1.4. Opérations de suppression d’éléments..................................................... 389
18.1.5. Opérations de remplacement.................................................................... 391
18.1.6. Réorganisation de séquences ................................................................... 392
18.1.6.1. Opérations de rotation et de permutation .................................... 393
18.1.6.2. Opérations d’inversion ................................................................ 394
18.1.6.3. Opérations de mélange ................................................................ 395
18.1.7. Algorithmes d’itération et de transformation........................................... 396
18.2. Opérations de recherche ....................................................................................... 401
18.2.1. Opération de recherche d’éléments.......................................................... 401
18.2.2. Opérations de recherche de motifs........................................................... 403
18.3. Opérations d’ordonnancement.............................................................................. 405
18.3.1. Opérations de gestion des tas................................................................... 406
18.3.2. Opérations de tri....................................................................................... 408
18.3.3. Opérations de recherche binaire............................................................... 412
18.4. Opérations de comparaison .................................................................................. 415
18.5. Opérations ensemblistes ....................................................................................... 417
18.5.1. Opérations d’inclusion............................................................................. 417
18.5.2. Opérations d’intersection ......................................................................... 418
18.5.3. Opérations d’union et de fusion............................................................... 420
18.5.4. Opérations de différence .......................................................................... 422
18.5.5. Opérations de partitionnement................................................................. 424
19. Conclusion ................................................................................................................................. 427
A. Priorités des opérateurs............................................................................................................. 429
B. Draft Papers................................................................................................................................ 431
C. GNU Free Documentation License........................................................................................... 433
D. Licence de documentation libre GNU...................................................................................... 439
BIBLIOGRAPHIE ......................................................................................................................... 445
ConversionConversion EmoticonEmoticon
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.