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 :

Signature de méthode et héritage


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 2
    Par défaut Signature de méthode et héritage
    Bonjour,

    J'ai un petit pbl d'héritage, soit deux classe A et B, B hérite de A :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    class A  {
    public :
        A();
        virtual ~A();
     
    public :
        inline virtual void bintest(unsigned char * argument_0);
        inline virtual void bintest(int argument_0);
    };
     
    inline void A::bintest(unsigned char * argument_0) {
        omcout << "A::bintest(unsigned char *)" << omendl;
    }
     
    inline void A::bintest(int argument_0) {
        //#[ operation bintest(int) 
        //#]
    }
     
     
    class B : virtual public A {
    public :
        B();
        ~B();
    public :
        inline void bintest(int argument_0);
    };
     
    inline void B::bintest(int argument_0) {
        unsigned char z;
        bintest(&z);
    }
    Pour moi, B hérite du de la methode A::bintest(unsigned char *...) et l'appel dans B::bintest(int argument_0) ne devrait pas poser de problème, or le compilo me dit :
    Compiling B.cpp
    In file included from B.cpp:11:
    B.h: In member function `virtual void B::bintest(int)':
    B.h:56: error: invalid conversion from `unsigned char*' to `int'
    B.h:56: error: initializing argument 1 of `virtual void B::bintest(int)'
    J'ai le même problème en gcc sous Cygwin et QNX et en Visual, donc ce ne doit pas être un pbl de compilo.

    L'héritage permet bien de bénéficier du code écrit dans les méthodes des classes "parents" (pas abstraites bien sûr) ?

    Merci de m'éclairer.

  2. #2
    la_tupac
    Invité(e)
    Par défaut
    Salut, c'est normal tu as deux methodes identiques mais à argument différent. Donc la methode mère est utilisée. Change de nom de methode pour la class B, ou utilise un pointeur que tu castera diférament s'il sagit de char ou de int.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A::bintest(void* p)
    int i = (int*)p; || char c[] = (const char*)p;

  3. #3
    Membre éclairé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Par défaut
    Bonjour,
    la version de "bintest" définie dans B masque celles de la classe parent A (cf. ).
    Essaye avec A::bintest lors de l'appel ou utilise un using A::bintest .

  4. #4
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inline void B::bintest(int argument_0) {
        unsigned char z;
        A::bintest(&z);
    }
    [Edit]: y'a'm'a fait grillé Effectivement, l'entrée de la FAQ est + complète).

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 2
    Par défaut
    Merci pour vos réponses... l'appel de "using" permet bien de me dépanner ! En effet, puisque B hérite de A, je n'ai pas à ajouter A:: dans l'appel de la méthode puisque B hérite.

    J'ai trouvé la même solution que la FAQ sur ce lien (paragraphe 2.3)
    http://jlecomte.ifrance.com/c++/c++-...itance-fr.html

    En déclarant using A::bintest; dans la classe B, mon code fonctionne !

    Merci à tous.

Discussions similaires

  1. Signature des méthodes redéfinies
    Par Yiempia dans le forum Langage
    Réponses: 18
    Dernier message: 03/10/2013, 17h41
  2. Méthode et héritage
    Par Kaluza dans le forum Débuter
    Réponses: 8
    Dernier message: 22/10/2011, 10h15
  3. [PHP 5.3] Abstract méthode en héritage
    Par Général03 dans le forum Langage
    Réponses: 3
    Dernier message: 21/10/2011, 11h31
  4. Signatures des méthodes
    Par szdavid dans le forum Général Python
    Réponses: 4
    Dernier message: 28/01/2006, 11h59
  5. Réponses: 3
    Dernier message: 06/10/2005, 15h21

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