Extrait du cours de C/C++
Note : La bibliothèque standard C++ fournit une classe traitant les nombres complexes de manière complète, la classe complex. Cette classe n’est donc donnée ici qu’à titre d’exemple et ne devra évidemment pas être utilisée. La définition des nombres complexes et de leur principales propriétés sera donnée dans la Section 14.3.1, où la classe complex sera décrite.
Les opérateurs d’affectation fournissent un exemple d’utilisation du pointeur this. Ces opérateurs renvoient en effet systématiquement l’objet sur lequel ils travaillent, afin de permettre des affectations
multiples. Les opérateurs de ce type devront donc tous se terminer par :
return *this;
8.11.2. Surcharge des opérateurs externes
Une deuxième possibilité nous est offerte par le langage pour surcharger les opérateurs. La définition de l’opérateur ne se fait plus dans la classe qui l’utilise, mais en dehors de celle-ci, par surcharge d’un opérateur de l’espace de nommage global. Il s’agit donc d’opérateurs externes cette fois.
La surcharge des opérateurs externes se fait donc exactement comme on surcharge les fonctions normales.
Dans ce cas, tous les opérandes de l’opérateur devront être passés en paramètres : il n’y aura pas de paramètre implicite (le pointeur this n’est pas passé en paramètre).
La syntaxe est la suivante :
type operatorOp(opérandes)
où opérandes est la liste complète des opérandes.
L’avantage de cette syntaxe est que l’opérateur est réellement symétrique, contrairement à ce qui se passe pour les opérateurs définis à l’intérieur de la classe. Ainsi, si l’utilisation de cet opérateur
nécessite un transtypage sur l’un des opérandes, il n’est pas nécessaire que cet opérande soit obligatoirement le deuxième. Donc si la classe dispose de constructeurs permettant de convertir un type de donnée en son prope type, ce type de donnée peut être utilisé avec tous les opérateurs de la classe.
Par exemple, les opérateurs d’addition, de soustraction, de multiplication et de division de la classe complexe peuvent être implémentés comme dans l’exemple suivant.
……
Sommaire: Cours de C/C++
Avant-propos
I. Le langage C++
1. Première approche du C/C++
1.1. Les commentaires en C++
1.2. Les types prédéfinis du C/C++
1.3. Notation des valeurs
1.4. La définition des variables
1.5. Instructions et opérations
1.6. Les fonctions
1.6.1. Définition des fonctions
1.6.2. Appel des fonctions
1.6.3. Déclaration des fonctions
1.6.4. Surcharge des fonctions
1.6.5. Fonctions inline
1.6.6. Fonctions statiques
1.6.7. Fonctions prenant un nombre variable de paramètres
1.7. La fonction main
1.8. Les fonctions d’entrée / sortie de base
1.8.1. Généralités sur les flux d’entrée / sortie en C
1.8.2. La fonction printf
1.8.3. La fonction scanf
1.9. Exemple de programme complet
2. Les structures de contrôle
2.1. La structure conditionnelle if
2.2. La boucle for
2.3. Le while
2.4. Le do
2.5. Le branchement conditionnel
2.6. Le saut
2.7. Les commandes de rupture de séquence
3. Types avancés et classes de stockage
3.1. Structures de données et types complexes
3.1.1. Les structures
3.1.2. Les unions
3.1.3. Les énumérations
3.1.4. Les champs de bits
3.1.5. Initialisation des structures et des tableaux
3.1.6. Les alias de types
3.1.7. Transtypages
3.2. Les classes de stockage
4. Les pointeurs et références
4.1. Notion d’adresse
4.2. Notion de pointeur
4.3. Déréférencement, indirection
4.4. Notion de référence
4.5. Lien entre les pointeurs et les références
4.6. Passage de paramètres par variable ou par valeur
4.6.1. Passage par valeur
4.6.2. Passage par variable
4.6.3. Avantages et inconvénients des deux méthodes
4.6.4. Comment passer les paramètres par variable en C ?
4.6.5. Passage de paramètres par référence
4.7. Références et pointeurs constants et volatiles
4.8. Arithmétique des pointeurs
4.9. Utilisation des pointeurs avec les tableaux
4.9.1. Conversions des tableaux en pointeurs
4.9.2. Paramètres de fonction de type tableau
4.10. Les chaînes de caractères : pointeurs et tableaux à la fois !
4.11. Allocation dynamique de mémoire
4.11.1. Allocation dynamique de mémoire en C
4.11.2. Allocation dynamique en C++
4.12. Pointeurs et références de fonctions
4.12.1. Pointeurs de fonctions
4.12.2. Références de fonctions
4.13. Paramètres de la fonction main – ligne de commande
4.14. DANGER
5. Le préprocesseur C
5.1. Définition
5.2. Les commandes du préprocesseur
5.2.1. Inclusion de fichier
5.2.2. Constantes de compilation et remplacement de texte
5.2.3. Compilation conditionnelle
5.2.4. Autres commandes
5.3. Les macros
5.4. Manipulation de chaînes de caractères dans les macros
5.5. Les trigraphes
6. Modularité des programmes et génération des binaires
6.1. Pourquoi faire une programmation modulaire?
6.2. Les différentes phases du processus de génération des exécutables
6.3. Compilation séparée en C/C++
6.4. Syntaxe des outils de compilation
6.4.1. Syntaxe des compilateurs
6.4.2. Syntaxe de make
6.5. Problèmes syntaxiques relatifs à la compilation séparée
6.5.1. Déclaration des types
6.5.2. Déclaration des variables
6.5.3. Déclaration des fonctions
6.5.4. Directives d’édition de liens
7. Comment faire du code illisible ?
8. C++ : la couche objet
8.1. Généralités
8.2. Extension de la notion de type du C
8.3. Déclaration de classes en C++
8.4. Encapsulation des données
8.5. Héritage
8.6. Classes virtuelles
8.7. Fonctions et classes amies
8.7.1. Fonctions amies
8.7.2. Classes amies
8.8. Constructeurs et destructeurs
8.8.1. Définition des constructeurs et des destructeurs
……
Cours de C/C++ (2,74 MO) (Cours PDF)