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 averti
    Inscrit en
    Mars 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 26
    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 confirmé

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

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 26
    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 confirmé

    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
    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