Table des matières Préface 6 Chapitre 1 Structure des fichiers 11 1.1 Déclaration de droits d'auteur et de version 11 1.2 Structure du fichier d'en-tête 12 1.3 Structure du fichier de définition 13 1.4 Le rôle des fichiers d'en-tête 13 1.5 Structure du répertoire 14 Chapitre 2 Présentation du programme 15 2.1 Ligne vierge 15 2.2 Ligne de code 16 2.3 Espaces dans les lignes de code17 2.4 Alignement18 2.5 Fendage de lignes longues 19 2.6 Position des modificateurs 19 2.7 Remarque 20 2.8 Disposition des classes 21 Chapitre 3 Règles de dénomination 22 3.1 Règles communes 22 3.2 Règles simples de dénomination des applications WINDOWS 23 3.3 Règles de dénomination simples des applications UNIX 25 Chapitre 4 Expressions et déclarations de base 26 4.1 Priorité des opérateurs 26 4.2 Expressions composées 27 4.3 Instruction SI 27 4.4 Efficacité des instructions de boucle 29 4.5 Variables de contrôle de boucle de l'instruction FOR 30 4.6 Instruction SWITCH 30 4.7 Instruction GOTO 31 Chapitre 5 Constantes 33 5.1 Pourquoi des constantes sont nécessaires 33 5.2 CONST contre #DEFINE 33 5.3 Règles de définition des constantes 33 5.4 Constantes dans les classes 34 Chapitre 6 Conception des fonctions 36 6.1 Règles pour les paramètres 36 6.2 Règles pour les valeurs de retour 37 6.3 Règles de mise en œuvre interne des fonctions 39 6.4 Autres suggestions 40 6.5 Utiliser des assertions 41 6.6 Comparaison des références et des pointeurs 42 Chapitre 7 Gestion de la mémoire 44 7.1 Méthode d'allocation de mémoire 44 7.2 Erreurs de mémoire courantes et leurs contre-mesures 44 7.3 Comparaison des pointeurs et des tableaux 45 7.4 Comment les paramètres du pointeur transfèrent-ils la mémoire ? 47 7.5 Qu'arrive-t-il aux pointeurs avec FREE et DELETE ? 50 7.6 La mémoire dynamique sera-t-elle libérée automatiquement ? 50 7.7 Éliminer les « pointeurs sauvages » 51 7.8 Pourquoi avons-nous besoin de NEW/DELETE alors que nous avons MALLOC/FREE ? 52 7.9 Que dois-je faire si la mémoire est épuisée ? 53 7.10 Points clés pour l'utilisation de MALLOC/FREE 54 7.11 Points clés pour l'utilisation de NEW/DELETE 55 7.12 Quelques idées 56 Chapitre 8 Fonctionnalités avancées des fonctions C++ 57 8.1 La notion de surcharge de fonctions 57 8.2 Surcharge, remplacement et masquage des fonctions membres 60 8.3 Valeurs par défaut des paramètres 63 8.4 Surcharge de l'opérateur 64 8.5 Fonction inline 65 8.6 Quelques idées 68 Chapitre 9 Constructeurs, destructeurs et fonctions d'affectation des classes 69 9.1 L'origine des constructeurs et des destructeurs 69 9.2 Table d'initialisation du constructeur 70 9.3 Ordre de construction et de destruction 72 9.4 Exemple : Constructeur et destructeur de la classe STRING 72 9.5 Ne sous-estimez pas les constructeurs de copie et les fonctions d'affectation 73 9.6 Exemple : constructeur de copie et fonction d'affectation de la classe STRING 73 9.7 La manière paresseuse de gérer les constructeurs de copie et les fonctions d'affectation 75 9.8 Comment implémenter les fonctions de base d'une classe dans une classe dérivée 75 9.9 Quelques idées 77 Chapitre 10 Héritage et composition des classes 78 10.1 Héritage 78 10.2 Combinaison 80 Chapitre 11 Autres expériences de programmation 82 11.1 Utiliser CONST pour améliorer la robustesse des fonctions 82 11.2 Améliorer l'efficacité du programme 84 11.3 Quelques suggestions utiles 85 Référence 87 Annexe A : Formulaire de révision du code C++/C 88 Annexe B : Questions du test C++/C 93 Annexe C : Réponses et critères de notation pour les questions du test C++/C 97