Fonctions Virtuelles en Cpp hh

Click here to load reader

  • date post

    29-Sep-2015
  • Category

    Documents

  • view

    217
  • download

    0

Embed Size (px)

description

ũcwxc

Transcript of Fonctions Virtuelles en Cpp hh

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

    Par 3DArchi

    Date de publication : 19 novembre 2009

    Les fonctions virtuelles sont un des piliers de la programmation oriente objet. En favorisantl'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 abordantaussi bien les problmes syntaxiques que les consquences smantiques 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 ractions dans cette discussion :

  • Les fonctions virtuelles en C++ : Types statiques et types dynamiques par 3DArchi

    - 2 -Copyright 2009 3DArchi. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse del'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

    http://apais.developpez.com/tutoriels/c++/fonctions-virtuelles-en-cpp/

    I - Les fonctions membres en C++............................................................................................................................. 4I-A - Les fonctions membres statiques.................................................................................................................. 4I-B - Les fonctions normales..................................................................................................................................5I-C - Les fonctions virtuelles.................................................................................................................................. 6I-D - La surcharge de fonction...............................................................................................................................8I-E - Quand l'hritage chamboule tout !...............................................................................................................10

    II - Type statique et type dynamique.........................................................................................................................12III - Types et appel de fonction................................................................................................................................. 15IV - A quoi servent les fonctions virtuelles ?.............................................................................................................19V - Premire consquence : comment bien dclarer son destructeur......................................................................20VI - Seconde consquence : inlining de fonctions et fonctions virtuelles................................................................. 24VII - Quand est construit le type dynamique ou quel est l'impact des appels de fonctions virtuelles dans unconstructeur ?.............................................................................................................................................................26VIII - Que devient le type dynamique lors de la destruction de l'objet ou peut-on appeler des fonctions virtuellesdans un destructeur ?................................................................................................................................................ 28IX - Construction, destruction, fonctions virtuelles et multithreading........................................................................ 29X - Une vision plus avance des appels de fonctions virtuelles dans les constructeurs et destructeurs.................. 29XI - Et pour les fonctions virtuelles pures ?.............................................................................................................. 31

    XI-A - Fonctions virtuelles pures, classes abstraites, classes concrtes............................................................ 31XI-B - Appel d'une fonction virtuelle pure............................................................................................................ 34XI-C - Un destructeur virtuel pur..........................................................................................................................38XI-D - Appel d'une fonction virtuelle pure dans le constructeur/destructeur d'une classe abstraite.....................39XI-E - Fonctions virtuelles pures et constructeur/destructeur des classes concrtes..........................................42

    XII - L'operateur d'affectation : operator=..................................................................................................................43XIII - Le retour covariant des fonctions virtuelles......................................................................................................45XIV - Forcer un appel spcifique d'une fonction virtuelle......................................................................................... 49XV - Fonctions virtuelles et visibilit..........................................................................................................................50XVI - Fonction virtuelle et masquage de fonction..................................................................................................... 53

    XVI-A - Masquage d'une fonction virtuelle par une fonction non virtuelle........................................................... 53XVI-B - Masquage d'une fonction non virtuelle par une fonction virtuelle........................................................... 60XVI-C - Des fonctions pas totalement masque................................................................................................. 61XVI-D - Ramener un symbole : using..................................................................................................................62XVI-E - Que conclure ?........................................................................................................................................ 62

    XVII - Fonctions virtuelles et fonctions gnriques (template)..................................................................................63XVII-A - Fonctions template................................................................................................................................. 63XVII-B - Fonctions virtuelles dans des classes gnriques.................................................................................63

    XVIII - Fonctions virtuelles et amiti (friend)............................................................................................................. 66XIX - Fonctions virtuelles et spcification d'exceptions.............................................................................................68

    XIX-A - Rappel sur les exceptions.......................................................................................................................68XIX-B - Exceptions et hirarchie de classes....................................................................................................... 69XIX-C - Les exceptions d'une fonction virtuelle................................................................................................... 70

    XX - Fonctions virtuelles et programmation par contrat............................................................................................71XX-A - Un rapide rappel...................................................................................................................................... 71XX-B - Le principe de substitution de Liskov.......................................................................................................72XX-C - Impact sur les invariants pour une fonction virtuelle............................................................................... 72XX-D - Impact sur les prconditions pour une fonction virtuelle......................................................................... 73XX-E - Impact sur les postconditions pour une fonction virtuelle........................................................................ 74

    XXI - Le pattern N.V.I................................................................................................................................................ 75XXII - Informations sur les types (dynamiques et statiques) et conversions............................................................ 76

    XXII-A - Types polymorphes................................................................................................................................ 76XXII-B - Comment connatre le type dynamique d'une variable ?.......................................................................76

    XXII-B-1 - L'oprateur typeid.......................................................................................................................... 76XXII-B-2 - Evaluation de l'expression............................................................................................................. 78XXII-B-3 - La classe type_info........................................................................................................................80XXII-B-4 - Pourquoi rcuprer le type dynamique ?...................................................................................... 81

    XXII-C - Comment connatre le type statique d'une variable ?........................................................................... 81XXII-D - Conversions entre type de base et type driv.....................................................................................83

    XXII-D-1 - Conversion du type driv vers le type de base...........................................................................83

  • Les fonctions virtuelles en C++ : Types statiques et types dynamiques par 3DArchi

    - 3 -Copyright 2009 3DArchi. Aucune reproduction, mme partielle