• Aide
  • Eurêkoi Eurêkoi

Livre

Programmer en C++ moderne : de C++ 11 à C++ 20


  • Éditeur(s)
  • Date
    • DL 2019
  • Notes
    • Après une présentation détaillée de la syntaxe de base du langage C++ (types de données, opérateurs, instructions de contrôle, fonctions, pointeurs ou encore tableaux), l'auteur fournit une méthode de programmation. Plusieurs chapitres sont dédiés aux composants de la bibliothèque standard du C++ : conteneurs, algorithmes et itérateurs, etc. Chaque notion est illustrée de programmes complets.
  • Langues
    • Français
  • Description matérielle
    • 1 vol. (XXXIV-848 p.) : ill. ; 24 cm
  • Collections
  • Sujet(s)
  • ISBN
    • 978-2-212-67895-6
  • Indice
  • Quatrième de couverture
    • Acquérir une parfaite maîtrise du C+ + et de la programmation objet

      Les versions C+ + 11, C+ + 14 et C+ + 17 ont apporté au langage C+ + plus que de nouvelles fonctionnalités : une nouvelle façon de programmer. Dès lors, une refonte complète du classique Programmer en langage C+ + de Claude Delannoy s'imposait. C'est à cette tâche que s'est attelé l'auteur à l'occasion de cette 10e édition de l'ouvrage, en réécrivant les exemples de code et en préconisant de bonnes pratiques de programmation dans l'esprit de ce C+ + moderne.

      L'ouvrage ainsi remanié commence par une présentation détaillée de la syntaxe de base du langage, s'appuyant dès que possible sur les structures de données de la bibliothèque standard (types string et vector) et sur la déclaration automatique (C+ + 11). Puis il expose les techniques de gestion dynamique basées sur les « pointeurs intelligents » introduits par C+ + 11 et C+ + 14.

      L'auteur insiste ensuite sur la bonne compréhension des concepts objet et de la programmation générique à l'aide des « patrons ». Un chapitre est consacré à la « sémantique de déplacement » introduite par C+ + 11. Plusieurs chapitres sont dédiés aux conteneurs et aux algorithmes de la STL (Standard Template Llbrary). Les nouveautés de C+ + 20 (concepts et contraintes, modules, coroutines...) sont présentées en annexe.

      Chaque notion nouvelle et chaque fonction du langage est illustrée de programmes complets écrits en C+ + moderne, dont le code source est fourni sur le site www.editions-eyrolles.com. Un équivalent en C++ 03 est proposé quand nécessaire pour les lecteurs amenés à exploiter d'anciens programmes.

      À qui s'adresse ce livre ?

       Aux étudiants de cursus universitaires (DUT, licence, master), ainsi qu'aux élèves des écoles d'ingénieurs.

      ¤ À tout programmeur ayant déjà une expérience de la programmation (C, C#, Java, Python, PHP...) et souhaitant s'initier au langage C+ +.


  • Tables des matières
      • Programmer en C++ moderne

      • De C++11 à C++20

      • Claude Delannoy

      • Eyrolles

      • Chapitre 1 : Présentation du langage C++1
      • 1 - Programmation structurée et programmation orientée objet 2
      • 1.1 Problématique de la programmation2
      • 1.2 La programmation structurée2
      • 1.3 Les apports de la programmation orientée objet3
      • 1.3.1 Objet 3
      • 1.3.2 Encapsulation 3
      • 1.3.3 Classe 4
      • 1.3.4 Héritage 4
      • 1.3.5 Polymorphisme 4
      • 1.4 P.O.O., langages de programmation et C++4
      • 2 - C++ et la programmation structurée 5
      • 3 - C++ et la programmation orientée objet 6
      • 4 - C et C++ 8
      • 5 - C++ et les bibliothèques standards 9
      • Chapitre 2 : Généralités sur le langage C++11
      • 1 - Présentation par l'exemple de quelques instructions du langage C++ 12
      • 1.1 Un exemple de programme en langage C++12
      • 1.2 Structure d'un programme en langage C++13
      • 1.3 Déclarations13
      • 1.4 Pour écrire des informations : utiliser le flot cout14
      • 1.5 Pour faire une répétition : l'instruction for14
      • 1.6 Pour lire des informations : utiliser le flot cin15
      • 1.7 Pour faire des choix : l'instruction if15
      • 1.8 Les directives à destination du préprocesseur16
      • 1.9 L'instruction using17
      • 1.10 Exemple de programme utilisant le type caractère17
      • 2 - Quelques règles d'écriture 18
      • 2.1 Les identificateurs18
      • 2.2 Les mots-clés19
      • 2.3 Les séparateurs19
      • 2.4 Le format libre19
      • 2.5 Les commentaires20
      • 2.5.1 Les commentaires libres 20
      • 2.5.2 Les commentaires de fin de ligne 21
      • 3 - Création d'un programme en C++ 22
      • 3.1 L'édition du programme22
      • 3.2 La compilation22
      • 3.3 L'édition de liens22
      • 3.4 Les fichiers en-tête23
      • Chapitre 3 : Les types de base de C++25
      • 1 - La notion de type 25
      • 2 - Les types entiers 26
      • 2.1 Les différents types usuels d'entiers prévus par C++26
      • 2.2 Leur représentation en mémoire27
      • 2.3 Les types entiers non signés28
      • 2.4 Notation des constantes littérales entières28
      • 3 - Les types flottants 29
      • 3.1 Les différents types et leur représentation en mémoire29
      • 3.2 Notation des constantes littérales flottantes30
      • 4 - Les types caractères 31
      • 4.1 La notion de caractère en langage C++31
      • 4.2 Notation des constantes littérales de type caractère32
      • 5 - Le type bool 33
      • 6 - Déclaration des variables 34
      • 7 - Initialisation des variables 34
      • 7.1 Généralités34
      • 7.2 Notations de l'initialisation35
      • 7.2.1 La notation parenthésée 35
      • 7.2.2 La notation avec accolades (C++11) 35
      • 8 - Constantes et expressions constantes 36
      • 8.1 Le modificateur const36
      • 8.2 Le modificateur constexpr (C++11)36
      • 9 - Déclarations automatiques (C++11) 37
      • 9.1 Le mot-clé auto37
      • 9.2 Le mot-clé décltype37
      • 10 - Le mot-clé volatile 38
      • Chapitre 4 : Opérateurs et expressions39
      • 1 - Originalité des notions d'opérateur et d'expression en C++ 39
      • 2 - Les opérateurs arithmétiques en C++ 41
      • 2.1 Présentation des opérateurs41
      • 2.2 Les priorités relatives des opérateurs42
      • 2.3 Comportement des opérateurs en cas d'opération impossible42
      • 3 - Les conversions implicites pouvant intervenir dans un calcul d'expression 44
      • 3.1 Notion d'expression mixte44
      • 3.2 Les conversions usuelles d'ajustement de type44
      • 3.3 Les promotions numériques usuelles45
      • 3.3.1 Généralités 45
      • 3.3.2 Cas du type char 46
      • 3.3.3 Cas du type bool 47
      • 3.4 Les conversations en présence de types non signés47
      • 3.4.1 Cas des entiers 47
      • 3.4.2 Cas des caractères 48
      • 4 - Les opérateurs relationnels 49
      • 5 - Les opérateurs logiques 51
      • 5.1 Rôle51
      • 5.2 Court-circuit dans l'évaluation de (...) et (...)52
      • 6 - L'opérateur d'affectation ordinaire 53
      • 6.1 Notion de lvalue53
      • 6.2 L'opérateur d'affectation possède une associativité de droite à gauche54
      • 6.3 L'affectation peut entraîner une conversion54
      • 7 - Opérateurs d'incrémentation et de décrémentation 54
      • 7.1 Leur rôle54
      • 7.2 Leurs priorités56
      • 7.3 Leur intérêt56
      • 8 - Les opérateurs d'affectation élargie 56
      • 9 - Les conversions forcées par une affectation 57
      • 9.1 Cas usuels57
      • 9.2 Prise en compte d'un attribut de signe58
      • 10 - L'opérateur de cast 58
      • 11 - L'opérateur conditionnel 59
      • 12 - L'opérateur séquentiel 60
      • 13 - L'opérateur sizeof 62
      • 14 - Les opérateurs de manipulation de bits 62
      • 14.1 Présentation des opérateurs de manipulation de bits62
      • 14.2 Les opérateurs bit à bit63
      • 14.3 Les opérateurs de décalage64
      • 14.4 Exemples d'utilisation des opérations de bits64
      • 15 - Récapitulatif des priorités de tous les opérateurs 65
      • Chapitre 5 : Les entrées-sorties conversationnelles de C++67
      • 1 - Affichage à l'écran 67
      • 1.1 Exemple 168
      • 1.2 Exemple 268
      • 1.3 Les possibilités d'écriture sur cout69
      • 2 - Lecture au clavier 70
      • 2.1 Introduction70
      • 2.2 Les différentes possibilités de lecture sur cin71
      • 2.3 Notions de tampon et de caractères séparateurs71
      • 2.4 Premières règles utilisées par >>72
      • 2.5 Présence d'un caractère invalide dans une donnée72
      • 2.6 Les risques induits par la lecture au clavier73
      • 2.6.1 Manque de synchronisme entre clavier et écran 73
      • 2.6.2 Blocage de la lecture 74
      • 2.6.3 Boucle infinie sur un caractère invalide 74
      • Chapitre 6 : Les instructions de contrôle77
      • 1 - Les blocs d'instructions 78
      • 1.1 Blocs d'instructions78
      • 1.2 Déclarations dans un bloc79
      • 2 - L'instruction if 79
      • 2.1 Syntaxe de l'instruction if80
      • 2.2 Exemples80
      • 2.3 Imbrication des instructions if81
      • 3 - L'instruction switch 83
      • 3.1 Exemples d'introduction de l'instruction switch83
      • 3.2 Syntaxe de l'instruction switch86
      • 4 - L'instruction do... while 88
      • 4.1 Exemple d'introduction de l'instruction do... while88
      • 4.2 Syntaxe de l'instruction do... while89
      • 5 - L'instruction while 90
      • 5.1 Exemple d'introduction de l'instruction while90
      • 5.2 Syntaxe de l'instruction while91
      • 6 - L'instruction for 92
      • 6.1 Exemple d'introduction de l'instruction for92
      • 6.2 L'instruction for en général93
      • 6.3 Syntaxe de l'instruction for94
      • 7 - Les instructions de branchement inconditionnel : break, continue et goto 97
      • 7.1 L'instruction break97
      • 7.2 L'instruction continue98
      • 7.3 L'instruction goto99
      • 8 - Initialisation dans les instructions if et switch (C++17) 100
      • Chapitre 7 : Les fonctions103
      • 1 - Exemple de définition et d'utilisation d'une fonction 104
      • 2 - Quelques règles 106
      • 2.1 Arguments muets et arguments effectifs106
      • 2.2 L'instruction return106
      • 2.3 Cas des fonctions sans valeur de retour ou sans arguments107
      • 3 - Les fonctions et leurs déclarations 109
      • 3.1 Les différentes façons de déclarer une fonction109
      • 3.2 Où placer la déclaration d'une fonction109
      • 3.3 Contrôles et conversions induites par le prototype110
      • 4 - Transmission des arguments par valeur 110
      • 4.1 Cas général110
      • 4.2 Transmission par valeur et constance des arguments112
      • 4.2.1 Cas des arguments effectifs constants 112
      • 4.2.2 Cas des arguments muets constants 112
      • 5 - Transmission des arguments par référence 113
      • 5.1 Exemple de transmission d'arguments par référence113
      • 5.2 Propriétés de la transmission par référence d'un argument114
      • 5.3 Référence à un argument muet constant114
      • 5.4 Induction de risques indirects115
      • 6 - Les variables globales 116
      • 6.1 Exemple d'utilisation de variables globales116
      • 6.2 La portée des variables globales117
      • 6.3 La classe d'allocation des variables globales118
      • 7 - Les variables locales 118
      • 7.1 La portée des variables locales118
      • 7.2 Les variables locales automatiques119
      • 7.3 Les variables locales statiques120
      • 7.4 Variables locales à un bloc121
      • 7.5 Le cas des fonctions récursives122
      • 8 - Transmission par référence d'une valeur de retour 122
      • 8.1 Introduction123
      • 8.2 Conséquences dans la définition de la fonction123
      • 8.3 Conséquences dans l'utilisation de la fonction123
      • 8.4 Exemple124
      • 8.5 Valeur de retour constante125
      • 9 - Initialisation des variables 125
      • 9.1 Les variables de classe statique126
      • 9.2 Les variables de classe automatique126
      • 10 - Les arguments par défaut 127
      • 10.1 Exemples127
      • 10.2 Les propriétés des arguments par défaut129
      • 11 - Surdéfinition de fonctions 129
      • 11.1 Mise en oeuvre de la surdéfinition de fonctions130
      • 11.2 Exemples de choix d'une fonction surdéfinie131
      • 11.3 Règles de recherche d'une fonction surdéfinie133
      • 11.3.1 Cas des fonctions à un argument 133
      • 11.3.2 Cas des fonctions à plusieurs arguments 134
      • 12 - Les fonctions et la déclaration auto (C++11) 135
      • 12.1 Déclaration automatique du type des valeurs de retour135
      • 12.2 Déclaration automatique du type des arguments muets135
      • 12.3 Combinaison des deux possibilités136
      • 13 - Les fonctions déclarées constexpr (C++11) 136
      • 14 - La référence d'une manière générale 137
      • 14.1 Déclaration de variables de type référence137
      • 14.2 Initialisation de référence138
      • 15 - Les fonctions à arguments variables 139
      • 15.1 Le type initializer_list (C++11)139
      • 15.2 Application à une fonction à nombre variable d'arguments (C++11)141
      • 15.3 Les anciennes fonctions va_start et va_arg142
      • 16 - Conséquences de la compilation séparée 144
      • 16.1 Compilation séparée et prototypes144
      • 16.2 Fonction manquante lors de l'édition de liens145
      • 16.3 Le mécanisme de la surdéfinition de fonctions145
      • 16.4 Compilation séparée et variables globales147
      • 16.4.1 La portée d'une variable globale - la déclaration extern 147
      • 16.4.2 Les variables globales et l'édition de liens 147
      • 16.4.3 Les variables globales cachées - la déclaration static 148
      • 17 - La spécification inline 148
      • 18 - Terminaison d'un programme 151
      • Chapitre 8 : Le type string153
      • 1 - Déclaration et initialisation 153
      • 2 - Lecture et écriture de chaînes 155
      • 3 - Affectation de chaînes 156
      • 4 - Les fonctions size et empty 156
      • 5 - Concaténation de chaînes 157
      • 6 - Accès aux caractères d'une chaîne 158
      • 6.1 Accès à un caractère de rang donné158
      • 6.1.1 Généralités 158
      • 6.1.2 Absence de contrôle d'indice 158
      • 6.1.3 Exemple 159
      • 6.2 Traitement de tous les caractères d'une chaîne160
      • 6.2.1 Cas général 160
      • 6.2.2 L'instruction for pour les séquences 160
      • 6.2.3 Exemple 161
      • 7 - Les chaînes en argument d'une fonction 161
      • 8 - Les autres possibilités du type string 162
      • Chapitre 9 : Les pointeurs natifs163
      • 1 - Notion de pointeur - Les opérateurs * et (...) 164
      • 1.1 Introduction164
      • 1.2 Déclarations multiples et emploi des opérateurs * et (...)165
      • 1.3 Exemple166
      • 2 - Affectation et comparaison de pointeurs 168
      • 2.1 Affectation de pointeurs168
      • 2.2 Comparaisons de pointeurs168
      • 2.3 Le pointeur nul168
      • 2.4 Conversion implicite en bool169
      • 3 - Les conversions entre pointeurs 170
      • 4 - Les pointeurs génériques 170
      • 5 - Pointeurs et constance 171
      • 5.1 Pointeur sur un élément constant171
      • 5.2 Pointeur constant172
      • 5.3 Pointeur constant sur un élément constant173
      • 5.4 Constexpr et les pointeurs (C++11)173
      • 6 - Comment simuler une transmission par adresse avec un pointeur 174
      • 7 - Pointeurs et surdéfinition de fonctions 176
      • 8 - Utilisation de pointeurs sur des fonctions 177
      • 8.1 Paramétrage d'appel de fonctions177
      • 8.2 Fonctions transmises en argument178
      • 9 - Les expressions lambdas (C++11) 179
      • 9.1 Exemple introductif179
      • 9.2 La liste de capture d'une expression lambda180
      • 9.2.1 Expressions lambdas nommées 181
      • 9.2.2 Liste de capture 181
      • Chapitre 10 : La gestion dynamique183
      • 1 - Les opérateurs new et delete pour les types scalaires 184
      • 1.1 Présentation de new et delete184
      • 1.2 Exemples185
      • 1.2.1 Exemple 1 185
      • 1.2.2 Exemple 2 186
      • 1.2.3 Exemple 3 186
      • 1.3 En cas de manque de mémoire187
      • 2 - Les pointeurs intelligents (C++11) 187
      • 3 - Le type unique(...)ptr (C++11) 188
      • 3.1 Présentation générale188
      • 3.2 Fiabilisation des schémas précédents188
      • 3.2.1 Exemple 1 188
      • 3.2.2 Exemple 2 189
      • 3.3 Initialisation d'un unique(...)ptr189
      • 3.3.1 Initialisation avec new 189
      • 3.3.2 Initialisation avec make(...)unique 190
      • 3.3.3 Récapitulatif 191
      • 3.4 Propriétés des unique(...)ptr191
      • 3.4.1 Adresse contenue dans un unique(...)ptr 191
      • 3.4.2 Comparaisons 192
      • 3.5 Transfert de propriété192
      • 3.5.1 Par affectation avec move 192
      • 3.5.2 Par appel de fonction 194
      • 3.5.3 Cas particulier de la valeur de retour d'une fonction 195
      • 4 - Le type shared(...)ptr (C++11) 197
      • 4.1 Déclaration et initialisation197
      • 4.2 Utilisation198
      • 4.3 L'affectation et le compteur de références198
      • 4.4 Exemple200
      • 4.5 Transmission par valeur201
      • 4.6 Conversion entre shared(...)ptr et unique(...)ptr202
      • 5 - Quelques précautions (C++11) 203
      • 6 - Pointeurs intelligents et cycles (C++11) 203
      • 7 - Les suppresseurs (C++11) 204
      • 8 - Le type auto(...)ptr 205
      • Chapitre 11 : Les vecteurs, les tableaux natifs et les chaînes C207
      • 1 - Les vecteurs 208
      • 1.1 Exemple de présentation des vecteurs208
      • 1.2 Les éléments et les indices d'un vecteur209
      • 1.2.1 Quelques règles 209
      • 1.2.2 Absence de contrôle d'indice 210
      • 1.3 Initialisation d'un vecteur211
      • 1.4 Parcours d'un vecteur avec for pour les séquences212
      • 1.5 Affectation de vecteurs213
      • 1.6 Vecteurs transmis en argument d'une fonction214
      • 1.6.1 Par défaut, la transmission se fait par valeur 214
      • 1.6.2 Transmission d'un vecteur par référence ou par pointeur 215
      • 1.7 Autres possibilités du type vector216
      • 2 - Les tableaux natifs 216
      • 2.1 Les tableaux natifs216
      • 2.1.1 Exemple d'utilisation d'un tableau natif 216
      • 2.1.2 Quelques règles 217
      • 2.1.3 Parcours des éléments avec for pour les séquences (C++11))218
      • 2.2 Les tableaux natifs à plusieurs indices219
      • 2.2.1 Leur déclaration 219
      • 2.2.2 Arrangement en mémoire des tableaux à plusieurs indices 219
      • 2.2.3 Parcours des éléments d'un tableau à plusieurs indices (C++11)220
      • 2.3 Initialisation des tableaux natifs220
      • 2.3.1 Initialisation de tableaux natifs à un indice 220
      • 2.3.2 Initialisation de tableaux natifs à plusieurs indices 221
      • 2.3.3 Initialiseurs et classe d'allocation 222
      • 2.4 L'équivalence entre tableau natif et pointeur222
      • 2.4.1 Incrémentation de pointeurs 222
      • 2.4.2 Comparaison et soustraction de pointeurs 223
      • 2.4.3 Equivalence tableau à un indice et pointeur 223
      • 2.5 Équivalence tableau à plusieurs indices et pointeur224
      • 2.6 Transmission de tableaux natifs en argument226
      • 2.6.1 Cas des tableaux à un indice 226
      • 2.6.2 Cas des tableaux à plusieurs indices 228
      • 2.7 Les tableaux dynamiques230
      • 2.7.1 Avec des pointeurs natifs et les opérateurs new [] et delete [] 230
      • 2.7.2 Avec le type unique_ptr (C++11)231
      • 2.7.3 Exemple 231
      • 2.7.4 Initialisation de tableaux dynamiques 232
      • 3 - Les vecteurs multidimensionnels 233
      • 4 - Les chaînes de style C 234
      • 4.1 Représentation des chaînes de style C234
      • 4.2 Lecteure et écriture de chaînes de style C235
      • 4.3 Initialisation de tableaux natifs par des chaînes de style C236
      • 4.3.1 Initialisation de tableaux de caractères 236
      • 4.3.2 Initialisation de tableaux natifs de pointeurs natifs sur des chaînes 237
      • 4.4 Les arguments transmis à la fonction main238
      • 4.5 Généralités sur les fonctions traitant des chaînes de style C239
      • 4.5.1 Ces fonctions travaillent toujours sur les adresses 239
      • 4.5.2 La fonction strlen 240
      • 4.5.3 Le cas des fonctions de concaténation 240
      • 4.6 Quelques précautions à prendre avec les chaînes de style C240
      • 4.6.1 Une chaîne de style C possède une vraie fin, mais pas de vrai début 240
      • 4.6.2 Les risques de modification des chaînes constantes 241
      • Chapitre 12 : Classes et objets243
      • 1 - La notion de classe 244
      • 1.1 Définition d'une classe point244
      • 1.1.1 Déclaration de la classe point 244
      • 1.1.2 Définition des fonctions membres de la classe 245
      • 1.2 Utilisation de notre classe point246
      • 1.3 Exemple récapitulatif247
      • 1.4 La déclaration d'une classe d'une manière générale248
      • 2 - Les structures 249
      • 3 - Affectation d'objets 250
      • 4 - Notions de constructeur et de destructeur 251
      • 4.1 Introduction251
      • 4.2 Exemple de classe comportant un constructeur252
      • 4.3 Initialisation des membres dans l'en-tête du constructeur254
      • 4.4 Construction et destruction des objets256
      • 4.5 Rôles du constructeur et du destructeur257
      • 4.6 Quelques règles258
      • 5 - Objets transmis en argument d'une fonction 259
      • 5.1 Cas de la transmission par valeur259
      • 5.2 Cas de la transmission par référence260
      • 5.3 Cas de la transmission par pointeur : l'opérateur ->261
      • 6 - Les membres données statiques 262
      • 6.1 Le qualificatif static pour un membre donnée262
      • 6.2 Initialisation des membres données statiques263
      • 6.3 Exemple264
      • 7 - Exploitation d'une classe 265
      • 7.1 La classe comme composant logiciel265
      • 7.2 Protection contre les inclusions multiples267
      • 7.3 Cas des membres données statiques267
      • 7.4 Modification d'une classe268
      • 7.4.1 Notion d'interface et d'implémentation 268
      • 7.4.2 Modification d'une classe sans modification de son interface 268
      • 7.4.3 Modification d'une classe avec modification de son interface 269
      • Chapitre 13 : Les propriétés des fonctions membres271
      • 1 - Surdéfinition des fonctions membres 271
      • 2 - Arguments par défaut 274
      • 3 - Les fonctions membres en ligne 275
      • 4 - Constructeurs délégués (C++11) 277
      • 5 - Cas des objets transmis en argument d'une fonction membre 277
      • 6 - Mode de transmission des objets en argument 279
      • 6.1 Transmission de l'adresse d'un objet279
      • 6.2 Transmission par référence281
      • 6.3 Les problèmes posés par la transmission par valeur281
      • 7 - Lorsqu'une fonction renvoie un objet 282
      • 8 - Autoréférence : le mot-clé this 283
      • 9 - Les fonctions membres statiques 284
      • 10 - Fonctions membres et objets constants 286
      • 10.1 Définition d'une fonction membre constante286
      • 10.2 Propriétés d'une fonction membre constante287
      • 11 - Les membres mutables 289
      • Chapitre 14 : Construction, destruction et initialisation des objets291
      • 1 - Les objets automatiques et statiques 292
      • 1.1 Durée de vie292
      • 1.2 Appel des constructeurs et des destructeurs293
      • 1.3 Exemple294
      • 2 - Les objets dynamiques 295
      • 2.1 Cas d'une classe sans constructeur296
      • 2.2 Cas d'une classe avec constructeur297
      • 2.2.1 Cas des pointeurs natifs 297
      • 2.2.2 Avec les pointeurs intelligents (C++11) 298
      • 2.2.3 Exemple 298
      • 3 - Le constructeur de recopie 299
      • 3.1 Il n'existe pas de constructeur approprié300
      • 3.2 Il existe un constructeur approprié300
      • 3.3 Comment interdire la construction par recopie300
      • 4 - Exemple de constructeur de recopie 302
      • 4.1 Comportement du constructeur de recopie par défaut302
      • 4.1.1 Version pointeurs natifs 302
      • 4.1.2 Version unique_ptr (C++11) 304
      • 4.2 Définition d'un constructeur de recopie305
      • 5 - Initialisation d'un objet lors de sa déclaration 308
      • 5.1 Cas d'un constructeur à un seul argument308
      • 5.2 Cas d'un constructeur à plusieurs arguments310
      • 5.3 Le mot-clé default pour un constructeur (C++11)311
      • 5.4 Cas particulier des classes agrégats311
      • 5.5 Constructeur avec initializer_list (C++11)312
      • 6 - Objets membres 314
      • 6.1 Introduction314
      • 6.2 Mise en oeuvre des constructeurs et des destructeurs315
      • 6.3 Le constructeur de recopie317
      • 7 - Les tableaux et vecteurs d'objets 318
      • 7.1 Notations318
      • 7.2 Constructeurs et initialiseurs319
      • 7.3 Cas des tableaux dynamiques d'objets320
      • 8 - Les objets temporaires 321
      • 9 - Dissocier l'allocation mémoire de la construction 323
      • Chapitre 15 : Les fonctions amies325
      • 1 - Exemple de fonction indépendante amie d'une classe 326
      • 2 - Les différentes situations d'amitié 328
      • 2.1 Fonction membre d'une classe, amie d'une autre classe329
      • 2.2 Fonction amie de plusieurs classes330
      • 2.3 Toutes les fonctions d'une classe amies d'une autre classe331
      • 3 - Exemple 331
      • 3.1 Fonction amie indépendante332
      • 3.2 Fonction amie, membre d'une classe333
      • 4 - Exploitation de classes disposant de fonctions amies 334
      • Chapitre 16 : La surdéfinition d'opérateurs335
      • 1 - Le mécanisme de la surdéfinition d'opérateurs 336
      • 1.1 Surdéfinition d'opérateur avec une fonction amie337
      • 1.2 Surdéfinition d'opérateur avec une fonction membre338
      • 1.3 Opérateurs et transmission par référence340
      • 2 - La surdéfinition d'opérateurs en général 341
      • 2.1 Se limiter aux opérateurs existants341
      • 2.2 Se placer dans un contexte de classe343
      • 2.3 Éviter les hypothèses sur le rôle d'un opérateur343
      • 2.4 Cas des opérateurs ++ et --344
      • 2.5 L'opérateur = possède une signification prédéfinie346
      • 2.6 Les conversions346
      • 2.7 Choix entre fonction membre et fonction amie347
      • 3 - Surdéfinition de l'opérateur = 347
      • 3.1 Rappels concernant le constructeur par recopie347
      • 3.2 Cas de l'affectation par défaut348
      • 3.3 Algorithme proposé350
      • 3.4 Valeur de retour351
      • 3.5 En définitive351
      • 3.6 Exemple de programme complet352
      • 3.7 Lorsqu'on souhaite interdire l'affectation354
      • 4 - La forme canonique d'une classe 355
      • 4.1 Cas général355
      • 5 - Exemple de surdéfinition de l'opérateur [] 356
      • 6 - Surdéfinition de l'opérateur () 359
      • 7 - Surdéfinition des opérateurs new et delete 360
      • 7.1 Surdéfinition de new et delete pour une classe donnée360
      • 7.2 Exemple361
      • 7.3 D'une manière générale363
      • Chapitre 17 : Les conversions de type définies par l'utilisateur365
      • 1 - Les différentes sortes de conversions définies par l'utilisateur 366
      • 2 - L'opérateur de cast pour la conversion type classe (...) type de base 368
      • 2.1 Définition de l'opérateur de cast368
      • 2.2 Exemple d'utilisation368
      • 2.3 Appel implicite de l'opérateur de cast lors d'un appel de fonction370
      • 2.4 Appel implicite de l'opérateur de cast dans l'évaluation d'une expression371
      • 2.5 Conversions en chaîne373
      • 2.6 En cas d'ambiguïté375
      • 3 - Le constructeur pour la conversion type de base (...) type classe 375
      • 3.1 Exemple375
      • 3.2 Le constructeur dans une chaîne de conversions377
      • 3.3 Choix entre constructeur ou opérateur d'affectation378
      • 3.4 Emploi d'un constructeur pour élargir la signification d'un opérateur379
      • 4 - Les conversions d'un type classe en un autre type classe 382
      • 4.1 Exemple simple d'opérateur de cast382
      • 4.2 Exemple de conversion par un constructeur383
      • 4.3 Pour donner une signification à un opérateur défini dans une autre classe385
      • 5 - Quelques conseils 387
      • Chapitre 18 : Les patrons de fonctions389
      • 1 - Exemple de création et d'utilisation d'un patron de fonctions 390
      • 1.1 Création d'un patron de fonctions390
      • 1.2 Premières utilisations du patron de fonctions391
      • 1.3 Autres utilisations du patron de fonctions392
      • 1.3.1 Application au type char* 392
      • 1.3.2 Application à un type classe 393
      • 1.4 Contraintes d'utilisation d'un patron394
      • 2 - Les paramètres de type d'un patron de fonctions 395
      • 2.1 Utilisation des paramètres de type dans la définition d'un patron395
      • 2.2 Identification des paramètres de type d'une fonction patron396
      • 2.3 Retour sur la syntaxe d'initialisation des variables397
      • 2.4 Limitations des patrons de fonctions398
      • 2.5 Le type initializer_list et les patrons de fonctions (C++11)399
      • 2.6 Paramètres de type par défaut (C++11)399
      • 3 - Les paramètres expressions d'un patron de fonctions 400
      • 4 - Surdéfinition de patrons 401
      • 4.1 Exemples ne comportant que des paramètres de type401
      • 4.2 Exemples comportant des paramètres expressions404
      • 5 - Spécialisation de fonctions de patron 405
      • 5.1 Généralités405
      • 5.2 Les spécialisations partielles406
      • 6 - Algorithme d'instanciation d'une fonction patron 406
      • 7 - Patrons de fonctions à nombre variable de paramètres (C++11) 408
      • Chapitre 19 : Les patrons de classes411
      • 1 - Exemple de création et d'utilisation d'un patron de classes 412
      • 1.1 Création d'un patron de classes412
      • 1.2 Utilisation d'un patron de classes414
      • 1.3 Contraintes d'utilisation d'un patron de classes414
      • 1.4 Exemple récapitulatif415
      • 2 - Les paramètres de type d'un patron de classes 417
      • 2.1 Les paramètres de type dans la création d'un patron de classes417
      • 2.2 Instanciation d'une classe patron417
      • 3 - Les paramètres expressions d'un patron de classes 418
      • 3.1 Exemple418
      • 3.2 Les propriétés des paramètres expressions420
      • 4 - Spécialisation d'un patron de classes 421
      • 4.1 Exemple de spécialisation d'une fonction membre421
      • 4.2 Les différentes possibilités de spécialisation422
      • 4.2.1 On peut spécialiser une fonction membre pour tous les paramètres 422
      • 4.2.2 On peut spécialiser une fonction membre ou une classe 423
      • 4.2.3 On peut prévoir des spécialisations partielles de patrons de classes 423
      • 5 - Paramètres par défaut 423
      • 6 - Patrons de fonctions membres 424
      • 7 - Identité de classes patrons 424
      • 8 - Classes patrons et déclarations d'amitié 425
      • 8.1 Déclaration de classes ou fonctions « ordinaires » amies425
      • 8.2 Déclaration d'instances particulières de classes patrons ou de fonctions patrons426
      • 8.3 Déclaration d'un autre patron de fonctions ou de classes426
      • 8.4 Déclaration d'amitié d'un paramètre de type (C++11)427
      • 9 - Compilation conditionnelle avec if constepr (C++17) 427
      • 10 - Patrons de classes à paramètres variables (C++11) 428
      • Chapitre 20 : L'héritage simple429
      • 1 - La notion d'héritage 430
      • 2 - Utilisation des membres de la classe de base dans une classe dérivée 432
      • 3 - Redéfinition des membres d'une classe dérivée 435
      • 3.1 Redéfinition des fonctions membres d'une classe dérivée435
      • 3.2 Redéfinition des membres données d'une classe dérivée436
      • 3.3 Redéfinition et surdéfinition437
      • 4 - Appel des constructeurs et des destructeurs 439
      • 4.1 Rappels439
      • 4.2 La hiérarchisation des appels439
      • 4.3 Transmission d'informations entre constructeurs440
      • 4.4 Exemple441
      • 4.5 Compléments442
      • 5 - Contrôle des accès 443
      • 5.1 Les membres protégés443
      • 5.2 Exemple444
      • 5.3 Intérêt du statut protégé445
      • 5.4 Dérivation publique et dérivation privée445
      • 5.4.1 Rappels concernant la dérivation publique 445
      • 5.4.2 Dérivation privée 446
      • 5.4.3 Les possibilités de dérivation protégée 447
      • 5.5 Récapitulation448
      • 6 - Compatibilité entre classe de base et classe dérivée 449
      • 6.1 Conversion implicite de pointeurs natifs et typage statique450
      • 6.2 Conversions de références453
      • 6.3 Cas de pointeurs intelligents454
      • 6.4 Conversion entre objet et objet dérivé454
      • 6.5 Les risques de violation des protections de la classe de base455
      • 7 - Le constructeur de recopie et l'héritage 455
      • 7.1 La classe dérivée ne définit pas de constructeur de recopie456
      • 7.2 La classe dérivée définit un constructeur de recopie457
      • 8 - L'opérateur d'affectation et l'héritage 458
      • 8.1 La classe dérivée ne surdéfinit pas l'opérateur=459
      • 8.2 La classe dérivée surdéfinit l'opérateur=459
      • 9 - Héritage et formes canoniques d'une classe 462
      • 10 - L'héritage et ses limites 463
      • 10.1 La situation d'héritage464
      • 10.1.1 Le type du résultat de l'appel 464
      • 10.1.2 Le type des arguments de f 464
      • 10.2 Exemples465
      • 10.2.1 Héritage dans pointcol d'un opérateur + défini dans point465
      • 10.2.2 Héritage dans pointcol de la fonction coincide de point 466
      • 11 - Patrons de classes et héritage 467
      • 11.1 Classe « ordinaire » dérivant d'une classe patron467
      • 11.2 Dérivation de patrons avec les mêmes paramètres468
      • 11.3 Dérivation de patrons avec introduction d'un nouveau paramètre469
      • 12 - L'héritage en pratique 470
      • 12.1 Dérivations successives470
      • 12.2 Différentes utilisations de l'héritage472
      • 12.3 Exploitation d'une classe dérivée472
      • Chapitre 21 : L'héritage multiple475
      • 1 - Mise en oeuvre de l'héritage multiple 476
      • 2 - Pour régler les éventuels conflits : les classes virtuelles 480
      • 3 - Appels des constructeurs et des destructeurs : cas des classes virtuelles 481
      • 4 - Exemple d'utilisation de l'héritage multiple et de la dérivation virtuelle 484
      • Chapitre 22 : Les fonctions virtuelles et le polymorphisme487
      • 1 - Rappel d'une situation où le typage dynamique est nécessaire 488
      • 2 - Le mécanisme des fonctions virtuelles 488
      • 3 - Autre situation où la ligature dynamique est indispensable 490
      • 4 - Polymorphisme, pointeurs et références 493
      • 4.1 Polymorphisme et pointeurs intelligent493
      • 4.2 Polymorphisme et références494
      • 5 - Les propriétés des fonctions virtuelles 495
      • 5.1 Leurs limitations sont celles de l'héritage495
      • 5.2 La redéfinition d'une fonction virtuelle n'est pas obligatoire496
      • 5.3 Fonctions virtuelles et surdéfinition497
      • 5.3.1 Généralités 497
      • 5.3.2 Contrôle des surdéfinitions de fonctions virtuelles (C++11) : override 497
      • 5.3.3 Interdiction de redéfinition d'une fonction virtuelle (C++11) : final 497
      • 5.4 Le type de retour d'une fonction virtuelle redéfinie498
      • 5.5 On peut déclarer une fonction virtuelle dans n'importe quelle classe499
      • 5.6 Quelques restrictions et conseils499
      • 5.6.1 Seule une fonction membre peut être virtuelle 499
      • 5.6.2 Un constructeur ne peut pas être virtuel 500
      • 5.6.3 Un destructeur peut être virtuel 500
      • 5.6.4 Cas particulier de l'opérateur d'affectation 501
      • 6 - Les fonctions virtuelles pures pour la création de classes abstraites 502
      • 7 - Exemple d'utilisation de fonctions virtuelles : liste hétérogène 504
      • 8 - Table des fonctions virtuelles 508
      • 9 - Identification de type à l'exécution 510
      • 9.1 Utilisation du champ name type_info510
      • 9.2 Utilisation des opérateurs de comparaison de type_info512
      • 9.3 Exemple avec des références513
      • 10 - Les cast dynamiques 513
      • Chapitre 23 : Optimisation par déplacement (C++11)517
      • 1 - La référence à une rvalue 518
      • 1.1 Généralités518
      • 1.2 Nouvelles règles de surdéfinition519
      • 1.3 Conversion d'une Ivalue en une rvalue : fonction move521
      • 1.4 Exemple522
      • 2 - Application à la construction et à l'affectation 522
      • 3 - Exemple d'écriture d'opérations de déplacement 524
      • 3.1 Le constructeur de déplacement524
      • 3.2 L'opérateur d'affectation par déplacent526
      • 3.3 Exemple complet527
      • 4 - Utilisation du déplacement par défaut 529
      • 5 - Sémantique de déplacement et héritage 530
      • 6 - Références rvalue et patrons de fonctions 531
      • 6.1 Référence « universelle » dans un patron de fonctions531
      • 6.2 Référence universelle et surdéfinition532
      • 6.3 Quand && dans un patron ne désigne plus une référence universelle532
      • 6.4 La fonction forward533
      • 6.5 En cas de spécialisation de patrons535
      • 7 - Retour sur le type unique_ptr 536
      • Chapitre 24 : Les flots537
      • 1 - Présentation générale de la classe ostream 539
      • 1.1 L'opérateur <<539
      • 1.2 Les flots prédéfinis540
      • 1.3 Quelques possibilités de formatage avec <<540
      • 1.3.1 Action sur la base de numération 541
      • 1.3.2 Action sur le gabarit de l'information écrite 542
      • 1.3.3 Action sur la précision de l'information écrite 543
      • 1.3.4 Choix entre notation flottante ou exponentielle 544
      • 1.3.5 Un programme de facturation amélioré 545
      • 1.4 Les opérations non formatées de la classe ostream546
      • 1.5 La fonction put546
      • 1.6 La fonction write547
      • 2 - Présentation générale de la classe istream 547
      • 2.1 L'opérateur >>547
      • 2.1.1 Les types acceptés par >> 548
      • 2.2 Les fonctions membres de la classe istream548
      • 2.3 La fonction get549
      • 2.4 La fonction read550
      • 2.4.1 Cas des caractères 550
      • 2.4.2 Autres cas 550
      • 2.5 Les fonctions getline et gcount550
      • 2.6 Quelques autres fonctions552
      • 3 - Statut d'erreur d'un flot 552
      • 3.1 Les bits d'erreur552
      • 3.2 Actions concernant les bits d'erreur553
      • 3.2.1 Accès aux bits d'erreur 553
      • 3.2.2 Modification du statut d'erreur 553
      • 3.3 Surdéfinition des opérateurs () et !554
      • 3.4 Exemples554
      • 4 - Surdéfinition de << et >> pour les types définis par l'utilisateur 556
      • 4.1 Méthode556
      • 4.2 Exemple558
      • 5 - Gestion du formatage 560
      • 5.1 Le statut de formatage d'un flot560
      • 5.2 Description du mot d'état du statut de formatage561
      • 5.3 Action sur le statut de formatage562
      • 5.3.1 Les manipulateurs non paramétriques 562
      • 5.3.2 Les manipulateurs paramétriques 563
      • 5.3.3 Les fonctions membres 564
      • 5.3.4 Exemple 566
      • 6 - Connexion d'un flot à un fichier 566
      • 6.1 Connexion d'un flot de sortie à un fichier567
      • 6.2 Connexion d'un flot d'entrée à un fichier568
      • 6.3 Les possibilités d'accès direct569
      • 6.4 Les différents modes d'ouverture d'un fichier571
      • 7 - Les anciennes possibilités de formatage en mémoire 572
      • 7.1 La classe ostrstream573
      • 7.2 La classe istrstream574
      • Chapitre 25 : La gestion des exceptions577
      • 1 - Premier exemple d'exception 578
      • 1.1 Comment lancer une exception : l'instruction throw579
      • 1.2 Utilisation d'un gestionnaire d'exception579
      • 1.3 Récapitulatif580
      • 2 - Second exemple 582
      • 3 - Le mécanisme de gestion des exceptions 584
      • 3.1 Poursuite de l'exécution du programme584
      • 3.2 Prise en compte des sorties de blocs586
      • 4 - Choix du gestionnaire 586
      • 4.1 Le gestionnaire reçoit toujours une copie587
      • 4.2 Règles de choix d'un gestionnaire d'exception587
      • 4.3 Le cheminement des exceptions588
      • 4.4 Redéclenchement d'une exception590
      • 5 - Spécification des exceptions 591
      • 5.1 Spécification d'avant C++11591
      • 5.2 Spécification avec C++11592
      • 5.3 Exemples592
      • 6 - Les exceptions standards 594
      • 6.1 Généralités594
      • 6.2 Les exceptions déclenchées par la bibliothèque standard595
      • 6.3 Les exceptions utilisables dans un programme595
      • 6.4 Cas particulier de la gestion dynamique de mémoire596
      • 6.4.1 L'exception bad_alloc 596
      • 6.4.2 L'opérateur new (nothrow) 597
      • 6.4.3 Utilisation de set_new_handler 598
      • 6.5 Création d'exceptions dérivées de la classe exception599
      • 6.5.1 Exemple 1 599
      • 6.5.2 Exemple 2 600
      • 7 - Exceptions et gestion de ressources 601
      • 7.1 Les problèmes posés par les objets dynamiques601
      • 7.2 Une solution utilisant les pointeurs intelligents (C++11)603
      • 7.3 La technique de gestion de ressources par initialisation603
      • Chapitre 26 : Généralités sur la bibliothèque standard605
      • 1 - Notions de conteneur, d'itérateur et d'algorithme 605
      • 1.1 Notion de conteneur606
      • 1.2 Notion d'itérateur606
      • 1.3 Parcours d'un conteneur avec un itérateur607
      • 1.3.1 Parcours direct 607
      • 1.3.2 Parcours inverse 608
      • 1.3.3 Itérateurs constants : const_iterator et const_reserve_iterator 608
      • 1.3.4 La déclaration auto et les itérateurs (C++11) 608
      • 1.4 Intervalle d'itérateur609
      • 1.5 Notion d'algorithme609
      • 1.6 Itérateurs et pointeurs610
      • 2 - Les différentes sortes de conteneurs 611
      • 2.1 Conteneurs et structures de données classiques611
      • 2.2 Les différentes catégories de conteneurs611
      • 3 - Les conteneurs dont les éléments sont des objets 612
      • 3.1 Construction, copie et affectation612
      • 3.2 Autres opérations614
      • 4 - Efficacité des opérations sur des conteneurs 614
      • 5 - Fonctions, prédicats et classes fonctions 615
      • 5.1 Fonction unaire615
      • 5.2 Prédicats615
      • 5.3 Classes et objets fonctions616
      • 5.3.1 Utilisation d'objet fonction comme fonction de rappel 616
      • 5.3.2 Classes fonctions prédéfinies 617
      • 5.3.3 La classe function (C++11) 618
      • 6 - Conteneurs, algorithmes et relations d'ordre 619
      • 6.1 Introduction619
      • 6.2 Propriétés à respecter620
      • Chapitre 27 : Les conteneurs séquentiels621
      • 1 - Fonctionnalités communes aux conteneurs vector, list et deque 622
      • 1.1 Construction622
      • 1.1.1 Construction d'un conteneur vide 622
      • 1.1.2 Construction avec un nombre donné d'éléments 622
      • 1.1.3 Construction avec un nombre donné d'éléments de valeur donnée 623
      • 1.1.4 Construction à partir d'une séquence 623
      • 1.1.5 Construction à partir d'un autre conteneur de même type 624
      • 1.1.6 Construction à partir d'une liste de valeurs (C++11) 624
      • 1.2 Modifications globales624
      • 1.2.1 Opérateur d'affectation 625
      • 1.2.2 La fonction membre assign 625
      • 1.2.3 La fonction clear 626
      • 1.2.4 La fonction swap 626
      • 1.3 Comparaison de conteneurs626
      • 1.3.1 L'opérateur == 626
      • 1.3.2 L'opérateur < 627
      • 1.3.3 Exemples avec un vector <int> 627
      • 1.3.4 Exemple avec un vector <point> 627
      • 1.4 Insertion ou suppression d'éléments629
      • 1.4.1 Insertion 629
      • 1.4.2 Suppression 630
      • 1.4.3 Cas des insertions/suppressions en fin : pop_back et push_back 630
      • 2 - Le conteneur vector 631
      • 2.1 Accès aux éléments existants631
      • 2.1.1 Accès par itérateur 631
      • 2.1.2 Accès par indice 632
      • 2.1.3 Cas de l'accès au dernier élément 632
      • 2.2 Insertions et suppressions632
      • 2.3 Gestion de l'emplacement mémoire633
      • 2.3.1 Introduction 633
      • 2.3.2 Invalidation d'itérateurs ou de références 633
      • 2.3.3 Outils de gestion de l'emplacement mémoire d'un vecteur 633
      • 2.4 Exemple634
      • 2.5 Cas particulier des vecteurs de booléens636
      • 3 - Le conteneur deque 636
      • 3.1 Présentation générale636
      • 3.2 Exemple637
      • 4 - Le conteneur list 638
      • 4.1 Accès aux éléments existants638
      • 4.2 Insertions et suppressions639
      • 4.2.1 Suppression des éléments de valeur donnée 639
      • 4.2.2 Suppression des éléments répondant à une condition 639
      • 4.3 Opérations globales640
      • 4.3.1 Tri d'une liste 640
      • 4.3.2 Suppression des éléments en double 640
      • 4.3.3 Fusion de deux listes 641
      • 4.3.4 Transfert d'une partie de liste dans une autre 642
      • 4.4 Gestion de l'emplacement mémoire642
      • 4.5 Exemple643
      • 5 - Les adaptateurs de conteneur : queue, stack et priority_queue 644
      • 5.1 L'adaptateur stack644
      • 5.2 L'adaptateur queue645
      • 5.3 L'adaptateur priority_queue646
      • 6 - Le type array (C++11) 647
      • Chapitre 28 : Les conteneurs associatifs649
      • 1 - Le conteneur map 650
      • 1.1 Exemple introductif650
      • 1.2 Le patron de classes pair652
      • 1.3 Construction d'un conteneur de type map653
      • 1.3.1 Constructions utilisant la relation d'ordre par défaut 653
      • 1.3.2 Choix de l'ordre intrinsèque du conteneur 654
      • 1.3.3 Pour connaître la relation d'ordre utilisée par un conteneur 654
      • 1.3.4 Conséquences du choix de l'ordre d'un conteneur 655
      • 1.4 Accès aux éléments656
      • 1.4.1 Accès par l'opérateur [] 656
      • 1.4.2 Accès par itérateur 656
      • 1.4.3 Recherche par la fonction membre find 657
      • 1.5 Insertions et suppressions657
      • 1.5.1 Insertions 657
      • 1.5.2 Suppressions 658
      • 1.6 Gestion mémoire659
      • 1.7 Autres possibilités659
      • 1.8 Exemple660
      • 2 - Le conteneur multimap 661
      • 2.1 Présentation générale661
      • 2.2 Exemple662
      • 3 - Le conteneur set 664
      • 3.1 Présentation générale664
      • 3.2 Exemple664
      • 3.3 Le conteneur set et l'ensemble mathématique665
      • 4 - Le conteneur multiset 665
      • 5 - Le type tuple (C++11) 667
      • 6 - Les tables de hachage (C++11) 667
      • 7 - Conteneurs associatifs et algorithmes 667
      • Chapitre 29 : Les algorithmes standards669
      • 1 - Notions générales 669
      • 1.1 Algorithmes et itérateurs669
      • 1.2 Les catégories d'itérateurs670
      • 1.2.1 Itérateur en entrée 670
      • 1.2.2 Itérateur en sortie 670
      • 1.2.3 Hiérarchie des catégories d'itérateurs 671
      • 1.3 Algorithmes et séquences671
      • 1.4 Itérateur d'insertion672
      • 1.5 Itérateur de flot674
      • 1.5.1 Intérateur de flot de sortie 674
      • 1.5.2 Itérateur de flot d'entrée 675
      • 2 - Algorithmes d'initialisation de séquences existantes 675
      • 2.1 Copie d'une séquence dans une autre676
      • 2.2 Génération de valeurs par une fonction677
      • 3 - Algorithmes de recherche 679
      • 3.1 Algorithmes fondés sur une égalité ou un prédicat unaire679
      • 3.2 Algorithmes de recherche de maximum ou de minimum681
      • 4 - Algorithmes de transformation d'une séquence 682
      • 4.1 Remplacement de valeurs682
      • 4.2 Permutations de valeurs682
      • 4.2.1 Rotation 682
      • 4.2.2 Génération de permutations 683
      • 4.2.3 Permutations aléatoires 685
      • 4.3 Partitions686
      • 5 - Algorithmes dits « de suppression » 686
      • 6 - Algorithmes de tri 688
      • 7 - Algorithmes de recherche et de fusion sur des séquences ordonnées 689
      • 7.1 Algorithmes de recherche binaire690
      • 7.2 Algorithmes de fusion690
      • 8 - Algorithmes à caractère numérique 691
      • 9 - Algorithmes à caractère ensembliste 693
      • 10 - Algorithmes de manipulation de tas 694
      • Chapitre 30 : La classe string699
      • 1 - Généralités 700
      • 2 - Construction 700
      • 3 - Opérations globales 702
      • 4 - Concaténation 703
      • 5 - Recherche dans une chaîne 704
      • 5.1 Recherche d'une chaîne ou d'un caractère704
      • 5.2 Recherche d'un caractère présent ou absent d'une suite705
      • 6 - Insertions, suppressions et remplacements 705
      • 6.1 Insertions705
      • 6.2 Suppressions706
      • 6.3 Remplacements707
      • 7 - Les possibilités de formatage en mémoire 708
      • 7.1 La classe ostringstream708
      • 7.2 La classe istringstream709
      • 7.2.1 Présentation 709
      • 7.2.2 Utilisation pour fiabiliser les lectures au clavier 710
      • Chapitre 31 : Les outils numériques713
      • 1 - La classe complex 713
      • 2 - La classe valarray et les classes associées 715
      • 2.1 Constructeurs des classes valarray715
      • 2.2 L'opérateur []716
      • 2.3 Affectation et changement de taille716
      • 2.4 Calcul vectoriel717
      • 2.5 Sélection de valeurs par masque718
      • 2.6 Sections de vecteurs719
      • 2.7 Vecteurs d'indices721
      • 3 - La classe bitset 725
      • Chapitre 32 : Les espaces de noms725
      • 1 - Création d'espaces de noms 725
      • 1.1 Exemple de création d'un nouvel espace de noms726
      • 1.2 Exemple avec deux espaCes de noms727
      • 1.3 Espaces de noms et fichier en-tête728
      • 1.4 Instructions figurant dans un espace de noms728
      • 1.5 Création incrémentale d'espaces de noms729
      • 2 - Les instructions using 730
      • 2.1 La déclaration using pour les symboles730
      • 2.1.1 Présentation générale 730
      • 2.1.2 Masquage et ambiguïtés 732
      • 2.2 La directive using pour les espaces de noms733
      • 3 - Espaces de noms et recherche de fonctions 735
      • 4 - Imbrication des espaces de noms 737
      • 5 - Transitivité de la directive using 738
      • 6 - Les alias 738
      • 7 - Les espaces anonymes 739
      • 8 - Espaces de noms et déclarations d'amitié 739
      • Chapitre 33 : Le préprocesseur et les instructions typedef et using741
      • 1 - La directive #include 742
      • 2 - La directive #define 742
      • 2.1 Définition de symboles742
      • 2.2 Définition de macros744
      • 3 - La compilation conditionnelle 747
      • 3.1 Incorporation liée à l'existence de symboles747
      • 3.2 Incorporation liée à la valeur d'une expression748
      • 3.3 Compilation conditionnelle avec if constepr (C++17)749
      • 4 - La définition de synonymes avec typedef 750
      • 4.1 Définition d'un synonyme de int751
      • 4.2 Définition d'un synonyme de int*751
      • 4.3 Définition d'un synonyme de int[3]752
      • 4.4 Synonymes et patrons753
      • 4.5 Synonymes et fonctions754
      • 5 - Définition de synonymes de types avec using (C++11) 754
      • Chapitre 34 : Énumérations, champs de bits et unions755
      • 1 - Les énumérations 755
      • 1.1 Exemples introductifs756
      • 1.1.1 C++98 756
      • 1.1.2 C++11 756
      • 1.2 Propriétés du type énumération757
      • 2 - Les champs de bits 758
      • 3 - Les unions 759
      • Chapitre 35 : Introduction aux threads (C++11)761
      • 1 - Thread depuis une fonction ou un objet fonction 762
      • 1.1 Généralités762
      • 1.2 Transmission d'arguments à un thread763
      • 1.3 Mise en sommeil d'un thread764
      • 2 - Thread depuis une fonction membre 765
      • 3 - Threads et exceptions 765
      • 4 - Partage de données entre threads et verrous mutex 767
      • 5 - Prise en compte des exceptions avec verrou lock_guard 769
      • 6 - Les variables atomic 770
      • 7 - Transfert d'informations en retour d'un thread 771
      • 7.1 Utilisation de la fonction async771
      • 7.2 Démarche plus générale771
      • Annexe A : Règles de recherche d'une fonction surdéfinie775
      • 1 - Détermination des fonctions candidates 775
      • 2 - Algorithme de recherche d'une fonction à un seul argument 776
      • 2.1 Recherche d'une correspondance exacte776
      • 2.2 Promotions numériques777
      • 2.3 Conversions standards777
      • 2.4 Conversions définies par l'utilisateur778
      • 2.5 Fonctions à arguments variables778
      • 2.6 Exception : cas des champs de bits778
      • 3 - Fonctions à plusieurs arguments 779
      • 4 - Fonctions membres 779
      • Annexe B : Les différentes sortes de fonction en C++781
      • Annexe C : Les pointeurs sur des membres783
      • 1 - Les pointeurs sur des fonctions membres 783
      • 2 - Les pointeurs sur des membres données 784
      • 3 - L'héritage et les pointeurs sur des membres 785
      • Annexe D : Les algorithmes standards787
      • 1 - Algorithmes d'initialisation de séquences existantes 788
      • 2 - Algorithmes de recherche 789
      • 3 - Algorithmes de transformation d'une séquence 793
      • 4 - Algorithmes des suppression 796
      • 5 - Algorithmes de tri 797
      • 6 - Algorithmes de recherche et de fusion sur des séquences ordonnées 799
      • 7 - Algorithmes à caractère numérique 801
      • 8 - Algorithmes à caractère ensembliste 803
      • 9 - Algorithmes de manipulation de tas 805
      • 10 - Algorithmes divers 806
      • Annexe E : Les incompatibilités entre C et C++809
      • 1 - Emplacement des déclarations 809
      • 2 - Prototypes 809
      • 3 - Fonctions sans arguments 809
      • 4 - Fonctions sans valeur de retour 810
      • 5 - Le qualificatif const 810
      • 6 - Les pointeurs de type void* 810
      • 7 - Mots-clés 810
      • 8 - Les constantes de type caractère 811
      • 9 - Les définitions multiples 811
      • 10 - L'instruction goto 812
      • 11 - Les énumérations 812
      • 12 - Initialisation de tableaux de caractères 812
      • 13 - Les noms de fonctions 813
      • 14 - Tableaux de dimension variable 813
      • Annexe F : C++20815
      • 1 - Les concepts et les contraintes 815
      • 1.1 Premier exemple de concept et de contrainte816
      • 1.2 Utilisation de plusieurs contraintes818
      • 1.3 Exemple d'application à un patron de classes819
      • 1.4 La bibliothèque type-traits819
      • 1.5 D'une manière générale821
      • 1.5.1 Les différentes sortes de contraintes 821
      • 1.5.2 Les différentes façons d'utiliser les contraintes 821
      • 1.5.3 Concepts variables et concepts fonctions 823
      • 1.6 Concepts standards823
      • 2 - Les modules 824
      • 2.1 Premier exemple de module824
      • 2.2 Séparation interface et définition825
      • 2.3 Partitions de modules826
      • 2.3.1 Premier exemple 826
      • 2.3.2 Second exemple 827
      • 2.4 Types de modules827
      • 2.5 Eléments de compatibilité avec les versions antérieures827
      • 3 - Les coroutines 828
      • 4 - Choses diverses 828
      • Index831

  • Origine de la notice:
    • BPI
  • Disponible - 681.229 DEL

    Niveau 3 - Informatique