Utilité des fonctions virtuelles

Soyez le premier à donner votre avis sur cette source.

Vue 10 039 fois - Téléchargée 506 fois

Description

Ce petit bout de code permet de comprendre l'utilité du mot "virtual" pour les fonctions.
Il permet de voir quelle fonction est appelée par une instance de la classe suivant si la fonction est virtuelle ou non.
Le zip est contient un projet CodeBlocks. Si vous utilisez un autre logiciel, récupérez le CPP.

Source / Exemple :


#include <iostream>

class A
{

public:
    A()
    {
        std::cout << "Construction A" << std::endl;
    }
    virtual ~A()
    {
        std::cout << "Destruction A" << std::endl;
    }
    virtual void QuiSuisJe()
    {
        std::cout << "Je suis A" << std::endl;
    }
    void QuiSuisJeNonVirtuel()
    {
        std::cout << "Je suis A" << std::endl;
    }
    
};

class B:public A
{

public:
    B()
    {
        std::cout << "Construction B" << std::endl;
    }
    ~B()
    {
        std::cout << "Destruction B" << std::endl;
    }
    virtual void QuiSuisJe()
    {
        std::cout << "Je suis B" << std::endl;
    }
    void QuiSuisJeNonVirtuel()
    {
        std::cout << "Je suis B" << std::endl;
    }
};

int main()
{
    A * a_B = new B();                      // construction de A et B mais attribution du pointeur à un objet de type A
    a_B->QuiSuisJe();                       // affiche "Je suis B"
    a_B->QuiSuisJeNonVirtuel();             // affiche "Je suis A" : la fonction de la classe de base est appelée
 
    B * b = new B();                        // construction de A et B et attribution du pointeur à un objet de type B 
    b->QuiSuisJe();                         // affiche "Je suis B"
    b->QuiSuisJeNonVirtuel();               // affiche "Je suis B"
 
    delete a_B;
    delete b;
     
    return 0;
}

Conclusion :


Les fonctions QuiSuisJe et QuiSuisJeNonVirtuel sont les mêmes au mot clé "virtual" près...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de cs_max12

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.