Les fonctions virtuelles en C++ :
Types statiques et types dynamiques

Date de publication : 19 novembre 2009

Par 3DArchi (Ressources proposées par 3DArchi)
 

Les fonctions virtuelles sont un des piliers de la programmation orientée objet. En favorisant l'abstraction, elles permettent la construction d'architectures logicielles stables et évolutives. Cet article se propose d'explorer les fonctions virtuelles dans le langage C++ en abordant aussi bien les problèmes syntaxiques que les conséquences sémantiques de leur utilisation.
Vous pouvez lire cet article sur une seule page.
Vous pouvez lire cet article sur une version multi-page.
Commentaires, conseils et réactions dans cette discussion : 18 commentaires
Les fonctions virtuelles en C++
I. Les fonctions membres en C++
I-A. Les fonctions membres statiques
I-B. Les fonctions normales
I-C. Les fonctions virtuelles
I-D. La surcharge de fonction
I-E. Quand l'héritage chamboule tout !
II. Type statique et type dynamique
III. Types et appel de fonction
IV. A quoi servent les fonctions virtuelles ?
Les impacts du typage dynamique et statique
V. Première conséquence : comment bien déclarer son destructeur
VI. Seconde conséquence : inlining de fonctions et fonctions virtuelles
VII. Quand est construit le type dynamique ou quel est l'impact des appels de fonctions virtuelles dans un constructeur ?
VIII. Que devient le type dynamique lors de la destruction de l'objet ou peut-on appeler des fonctions virtuelles dans un destructeur ?
IX. Construction, destruction, fonctions virtuelles et multithreading
X. Une vision plus avancée des appels de fonctions virtuelles dans les constructeurs et destructeurs
XI. Et pour les fonctions virtuelles pures ?
XI-A. Fonctions virtuelles pures, classes abstraites, classes concrètes
XI-B. Appel d'une fonction virtuelle pure
XI-C. Un destructeur virtuel pur
XI-D. Appel d'une fonction virtuelle pure dans le constructeur/destructeur d'une classe abstraite
XI-E. Fonctions virtuelles pures et constructeur/destructeur des classes concrètes
XII. L'operateur d'affectation : operator=
Les fonctions virtuelles et les autres caractéristiques du langage
XIII. Le retour covariant des fonctions virtuelles
XIV. Forcer un appel spécifique d'une fonction virtuelle
XV. Fonctions virtuelles et visibilité
XVI. Fonction virtuelle et masquage de fonction
XVI-A. Masquage d'une fonction virtuelle par une fonction non virtuelle
XVI-B. Masquage d'une fonction non virtuelle par une fonction virtuelle
XVI-C. Des fonctions pas totalement masquée.
XVI-D. Ramener un symbole : using
XVI-E. Que conclure ?
XVII. Fonctions virtuelles et fonctions génériques (template)
XVII-A. Fonctions template
XVII-B. Fonctions virtuelles dans des classes génériques
XVIII. Fonctions virtuelles et amitié (friend)
XIX. Fonctions virtuelles et spécification d'exceptions
XIX-A. Rappel sur les exceptions
XIX-B. Exceptions et hiérarchie de classes
XIX-C. Les exceptions d'une fonction virtuelle
Les fonctions virtuelles et la programmation par contrat
XX. Fonctions virtuelles et programmation par contrat
XX-A. Un rapide rappel
XX-B. Le principe de substitution de Liskov
XX-C. Impact sur les invariants pour une fonction virtuelle
XX-D. Impact sur les préconditions pour une fonction virtuelle
XX-E. Impact sur les postconditions pour une fonction virtuelle
XXI. Le pattern N.V.I.
Informations sur les types statiques et dynamiques
XXII. Informations sur les types (dynamiques et statiques) et conversions
XXII-A. Types polymorphes
XXII-B. Comment connaître le type dynamique d'une variable ?
XXII-B-1. L'opérateur typeid
XXII-B-2. Evaluation de l'expression
XXII-B-3. La classe type_info
XXII-B-4. Pourquoi récupérer le type dynamique ?
XXII-C. Comment connaître le type statique d'une variable ?
XXII-D. Conversions entre type de base et type dérivé
XXII-D-1. Conversion du type dérivé vers le type de base
XXII-D-2. Conversion du type de base vers le type dérivé
XXII-D-3. Pourquoi faire une conversion d'un type de base vers un type dérivé
Mise en oeuvre par les compilateurs
XXIII. Comment ça marche ?
XXIII-A. Qui définit la mise en oeuvre ?
XXIII-B. Résoudre l'appel dynamiquement : les tables virtuelles
XXIII-C. Quelle entrée pour les fonctions virtuelles pures ?
XXIII-D. Comment sont construites les tables virtuelles ?
XXIII-E. Comment sont détruites les tables virtuelles ?
XXIII-F. Qu'est-ce qu'un pointeur de fonction virtuelle ?
Pour conclure
XXIV. A retenir
XXV. Un peu de lecture
XXVI. Remerciements


Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2009 3DArchi. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée.

 
 
 
 
Partenaires

Hébergement Web