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

Langage C++ Discussion :

Propagation du mot clef virtual


Sujet :

Langage C++

  1. #1
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut Propagation du mot clef virtual
    Bonjour,
    Le titre peut faire penser à la discussion juste au-dessus, mais pas tout à fait.

    Je me demandais si l'héritage d'une classe de base était bel et bien sensé devenir virtuel après le premier héritage virtuel... Un exemple sera plus rapide :

    Voilà ce qui ne marchait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    classe Base {
    }
    ;
    class Interface{
    };
     
    class Derived : virtual public Base, public Interface {
    };
     
    int main() {
      Derived d;
      Interface * i = &d //error : cannot convert from Derided* to Interface *
    }
    Code qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    classe Base {
    }
    ;
    class Interface{
    };
     
    class Derived : public Interface, virtual public Base {
    };
     
    int main() {
      Derived d();
      Interface * i = &d // Marche parfaitement
    }
    Du coup, je me demandais où se plaçait la restriction. La norme ? La technique ? Le compilateur ? Merci d'avance de satisfaire ma curiosité !
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Base {
    }
    ;
    class Interface{
    };
     
    class Derived : virtual public Base, public Interface {
    };
     
    int main() {
      Derived d;
      Interface * i = &d;
     
      return 0;
    }
    Ca marche très bien.
    Je soupçonne que tu avais oublié le 'public', l'héritage devenant alors privé. Il n'y a pas de propagation du virtual. Quelle était exactement l'intitulé de ton erreur et avec quel code ?

  3. #3
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Effectivement, c'est très étrange, mais en reprenant (en up depuis un depôt Mercurial) mon ancien code (qui ne marchait pas), cela fonctionne très bien >< (et nonon, j'avais pas oublié le public) !

    l'erreur était de mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cannot convert Derived* to Interface* in assignment
    Du coup, je suis vraiment très perplexe... Je pense délester le topic du coup ><.
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

Discussions similaires

  1. Mot clef virtual, classes filles
    Par NiamorH dans le forum C++
    Réponses: 6
    Dernier message: 13/10/2007, 13h34
  2. Réponses: 1
    Dernier message: 11/03/2006, 09h55
  3. mot-clef static
    Par keil dans le forum C++
    Réponses: 8
    Dernier message: 25/01/2006, 17h11
  4. mot clef sql pour nom de champ
    Par bobinou007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 13h21

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