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 :

héritagle accès méthode


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par défaut héritagle accès méthode
    Bonjour, petit problème, j'ai ça version simplifiée :

    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
     
     
    class A {
       bool m(int p);
    };
     
    class B : public A {
       bool m(int p);
    }
     
    bool B::m(int p) {
       A::m(3);
       return true;
    }
     
    int main(void) {
     
       A *Obj;
       Obj = new B();
     
       B->m(4); // erreur ici, le compilateur ne sait pas quelle méthode m appeler. Je veux appeler la méthode fille
     
       delete Obj;
     
    return 0;
    }
    En fait je veux appeler des objets spécialisés avec Obj, puis travailler que avec Obj. Mais j'ai cette erreur sur B->m(4) ... Comment résoudre ce problème sans changer le nom de la méthode pour conserver la surcharge ?

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,



    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
    class A {
           virtual bool m(int p)=0;
    };
    
    class B : public A {
          bool m(int p);
    };
    
    
    bool B::m(int p) {
          A::m(3);
          return true;
    }
    
    int main(void) {
    
         A *Obj;
         Obj = new B();
    
          Obj->m(4);[/B]
    
          delete Obj;
    
           return 0;
    }
    Virtual va dire que lorsqu'on appelle la méthode x, d'appeler la méthode x de la classe fille.
    =0 signifie que tu ne donne pas l'implémentation de la méthode (= méthode abstraite/virtuelle pure).

  3. #3
    Membre éprouvé Avatar de zhouyu
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Par défaut
    Ce n'est pas "delete(Obj);" par hasard ? ^^
    Il faut mettre la méthode au minimum virtual pour appeler la méthode de la classe enfant en priorité.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 64
    Par défaut zut
    Oui c'est delete Obj, on peut se passer des parenthèses.

    Sinon virtual marche pas, en fait la méthode de la classe A est déjà définie


    bool A::m(int p) {
    // blabla
    return false;
    }
    DOnc comment appeler la méthode fille ? Merci

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Ce n'est pas "delete(Obj);" par hasard ? ^^
    Je vais éditer ma correction, je ne l'avais pas remarqué^^

    Citation Envoyé par killwin Voir le message
    Sinon virtual marche pas, en fait la méthode de la classe A est déjà définie

    DOnc comment appeler la méthode fille ? Merci
    Virtual dois être mis dans la classe mère. Si la méthode est redéfinie dans les classes filles, elles seront elles-même automatiquement virtuelles.

Discussions similaires

  1. [AC-2010] Accès méthodes / propriétés de Word
    Par happy_diver dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/01/2012, 11h21
  2. Réponses: 2
    Dernier message: 23/11/2010, 16h45
  3. PB acces méthode dans classe membrée
    Par untipy dans le forum Débuter
    Réponses: 2
    Dernier message: 15/09/2010, 15h28
  4. Accés méthodes SWF externes ?
    Par HuGoOwW dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 02/04/2010, 09h14
  5. Réponses: 9
    Dernier message: 13/03/2008, 12h25

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