IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Virtuelles ou virtuelles pures


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut Virtuelles ou virtuelles pures
    Bonjour,
    Je lance un peti topic sur la différence entre les fonctions virtuelles et les virtuelles pures. Je n'arrive pas bien à cerner la différence, pouvez vous m'éclairer ne serait-ce qu'un peu sur ce sujet ??
    Merci à vous tous !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Virtuelle non-pure signifie que la classe de base implémente un comportement par défaut, les dérivées ne sont pas obligées de redéfinir la fonction.

    Virtuelle pure signifie au contraire une obligation de redéfinir la fonction pour les dérivée.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Ok, si j'ai bien compris, les prototypes des fonctions que je déclare dans ma classe de base suivie de "=0" sont des fonctions virtuelles pures, il est obligé de les implémenter plus tard dans toutes mes classes dérivées.
    Alors que les fonctions que je déclare "virtual" dans ma classe abtraite(fonctions virtuelles non pures), je n'ai pas besoin de les implémenter dans mes classes dérivées.
    Ai-je bien compris ?
    Merci beaucoup...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Oui tu as bien compris.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Merci beaucoup à toi.

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par womannosky Voir le message
    Ok, si j'ai bien compris, les prototypes des fonctions que je déclare dans ma classe de base suivie de "=0" sont des fonctions virtuelles pures, il est obligé de les implémenter plus tard dans toutes mes classes dérivées.
    Je dirais redéfinir au lieu d'implémenter. Car particularité du C++ : une fonction membre virtuelle pure peut etre implémentée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class A
    {
    public:
        virtual void Test() = 0
        {
        }
    };
     
    class B : public A
    {
        virtual void Test() {}
    };
    Le fait d'avoir au moins une fonction virtuelle pure rend ta classe abstraite.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    On peut juste rajouter le fait que, bien souvent, les fonctions virtuelle pures poursuivent un seul objectif: faire savoir à la classe de base (qui deviendra alors une "interface") que la fonction existe, mais que l'on ne dispose pas des informations nécessaire (au niveau de la classe de base) pour permettre de définir un comportement par défaut
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Comme conséquence, on peut noter que la classe de base ne sera pas instanciable mais que l'on sait d'ores et déjà que toutes ses classes filles implémentant les fonctions virtuelles pures auront une partie de l'interface (dont font partie les fonctions publiques) en commun avec la classe de base.
    polymorphisme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Classe virtuelle detructeur virtuel
    Par Jeane dans le forum C++
    Réponses: 3
    Dernier message: 26/06/2006, 23h06
  2. Réponses: 2
    Dernier message: 05/03/2006, 19h29
  3. Compilation avec des fonctions virtuel pure
    Par vanitom dans le forum C++
    Réponses: 4
    Dernier message: 16/12/2005, 14h37
  4. fonctions "pures virtuelles"
    Par Biosox dans le forum C++
    Réponses: 2
    Dernier message: 08/09/2005, 10h54
  5. Réponses: 19
    Dernier message: 10/02/2005, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo