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 :

fonctions "pures virtuelles"


Sujet :

C++

  1. #1
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut [résolu] fonctions "pures virtuelles"
    Bonjour.

    J'ai 3 classes: A, B et C.

    C hérite de B qui hérite de A.

    est-il possible de déclarer une fonction, func1(), pure virtuelle dans A, de sorte qu'elle soit instanciée en C, mais pas en B. En gros, qu'elle reste pure virtuelle "à travers B"?

    En effet, si j'instancie func1() dans B, quitte à surcharger cette fonction en C, le risque est que si qqun doit un jour écrire des classes C2, C3,... qui héritent aussi de B, alors si cette personne n'instancie pas func1(), le compilateur le laissera faire (le goupil!)

    La solution que j'ai imaginée, mais qui ne me plait pas du tout:
    func1 est pure virtuelle en A. Elle est instanciée en B: elle appelle func2 qui est pure virtuelle en B et instanciée en C. Une sorte de "cascade" de fonctions pure virtuelle. Mais je ne trouve pas cette solution tres "propre" (si je dois rajouter des classes intermediaires entre B et C, il faut tout re-modifier)

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut Re: fonctions "pures virtuelles"
    Citation Envoyé par Biosox
    Bonjour.

    J'ai 3 classes: A, B et C.

    C hérite de B qui hérite de A.

    est-il possible de déclarer une fonction, func1(), pure virtuelle dans A, de sorte qu'elle soit instanciée en C, mais pas en B. En gros, qu'elle reste pure virtuelle "à travers B"?
    Oui, il suffit de ne pas la mentionner dans B. B restera alors une classe abstraite (non instanciable). Je ne vois pas trop ton problème en fait.

    Par ailleurs, question de vocabulaire, pour une fonction on utilise plutôt les termes définir ou éventuellement implémenter, qu'instancier.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    merci. ça marche comme sur des roulettes!

    en fait l'erreur venait d'ailleur, mais induisait le compilateur en erreur et il me disait:
    "cannot instantiate abstract class due to following members" suivi d'un
    "pure virtual function was not defined"

    et moi j'ai cherché midi à quatorze heure.

    pour le vocabulaire: je tâcherai de faire attention merci

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

Discussions similaires

  1. Fonction pure virtuelle et classe abstraite
    Par olivier_78 dans le forum C++
    Réponses: 6
    Dernier message: 16/03/2012, 20h25

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