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 :

Appel d´une fonction de classe dérivée depuis la mère.


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 26
    Points : 17
    Points
    17
    Par défaut Appel d´une fonction de classe dérivée depuis la mère.
    Bonjour,
    Cela fait plusieurs jours que je fais face à un petit problème : j´ai une classe mère d´où plusieurs classes tirent leur héritage.
    J´appelle une fonction de la classe mère qui n´est redéfinie dans aucune classe fille. De cette fonction, j´aurai besoin d´en appeler une qui se situe :
    - soit dans la classe mère pour la quasi-totalité des instances des classes filles
    - dans une des classe fille (pour les objets d´une seule classe fille).

    Ouh là, je sens que je ne suis pas claire. Voici un exemple expurgé, contenant deux classes :
    - classe maitre :
    maitre.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef MAITRE_H
    #define MAITRE_H
    #include <iostream>
     
    class maitre
    {
        public:
            maitre();
            virtual ~maitre();
            void A();
            void B();
        protected:
        private:
    };
    maitre.cpp :
    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
    #include "maitre.h"
     
     
    maitre::maitre()
    {
        //ctor
    }
     
    maitre::~maitre()
    {
        //dtor
    }
     
    void maitre::A()
    {
        B();
    }
     
    void maitre::B()
    {
        printf("perdu\n");
    }
    - classe fils :
    fils.h :
    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
    #ifndef FILS_H
    #define FILS_H
     
    #include "maitre.h"
     
    class fils : public maitre
    {
        public:
            fils();
            virtual ~fils();
            void B();
        protected:
        private:
    };
    #endif // FILS_H
    fils.cpp :
    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
    #include "fils.h"
     
     
    fils::fils()
    {
        //ctor
    }
     
    fils::~fils()
    {
        //dtor
    }
     
    void fils::B()
    {
        printf("gagne !!!!!!!!!!!\n");
    }
    Enfin, le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main()
    {
        maitre *m1 = new maitre();
        fils *f1 = new fils();
        m1->A();
        f1->A();
        delete(m1);
        delete(f1);
        return 0;
    }
    En gros, j´aimerais afficher :"
    perdu
    gagne !!!!"
    Pour l''instant, j'obtiens :"
    perdu
    perdu
    "
    C'est donc que pour fils, c'est la fonction B de maitre qui est appelé et non la fonction B ("la plus spécialisée") de fils. Y-a-t'il un moyen d'obtenir ce comportement, vu que "maitre" ne connait pas "fils" ?
    Merci d'avance et désolé si la question parait bête !

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Mettre B virtual dans maitre.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 26
    Points : 17
    Points
    17
    Par défaut
    Parfait, je crois qu'il va falloir que je relise mes cours concernants les fonctions virtuelles (j'ai dû mélanger avec les classes virtuelles de java).
    Merci en tout cas !

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ne pas confondre virtuel et abstrait....

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/11/2007, 17h03
  2. Appel de fonction d'un UserControl depuis une Form
    Par belzeluc dans le forum Windows Forms
    Réponses: 7
    Dernier message: 14/09/2007, 17h42
  3. Réponses: 4
    Dernier message: 20/03/2007, 15h53
  4. Appel d’une fonction dans un état
    Par Isabelle27 dans le forum IHM
    Réponses: 3
    Dernier message: 29/01/2007, 23h02
  5. Appel de Fonction entre classes
    Par likenoother dans le forum C++
    Réponses: 5
    Dernier message: 09/08/2006, 15h37

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