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 :

principe de l'heritage: appeler la fonction de la classe fille


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut principe de l'heritage: appeler la fonction de la classe fille
    Bonjour,

    Alors j'ai simplifier le code au maximum, c'est juste une question pour savoir comment faire.

    Voici ce que je veux faire:
    - Une classe mere
    - Plusieurs classe fille

    Ailleurs(dans le main par exemple)
    - Un tableau qui contienne des elements de type classe fille

    Le code:
    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
    33
    34
    35
    36
     
    // Classe mere
    class Mere {
    public:
    	virtual void Affichage(void) {
    		printf("Je suis la Mere\n");
    	}
    }
     
    // Classe fille 1
    class Fille_1 : public Mere {
    public:
    	void Affichage(void) {
    		printf("Je suis la fille 1\n");
    	}
    }
     
    // Classe fille 2
    class Fille_2 : public Mere {
    public:
    	void Affichage(void) {
    		printf("Je suis la fille 2\n");
    	}
    }
     
    /*
     *
     */
     
    // Classe fille N
    class Fille_N : public Mere {
    public:
    	void Affichage(void) {
    		printf("Je suis la fille N\n");
    	}
    }
    Bon j'ai simplifier au maximum pour comprendre, pas de constructeur ni de variable bien sur dans mon cas les classes son un peu plus fourni .

    Et donc dans mon main je voudrais pouvoir faire ceci par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Mere* pTab[50];
    pTab[0] = new Fille_1();
    pTab[1] = new Fille_2();
    pTab[2] = new Fille_2();
    pTab[3] = new Fille_2();
    pTab[4] = new Fille_1();
    ...
    pTab[N] = new Fille_N();
     
    // Affichage du tableau
    for(i=0; i<50; i++)
    	pTab[i]->Affichage();
    Et je voudrais obtenir:
    Je suis la fille 1
    Je suis la fille 2
    Je suis la fille 2
    Je suis la fille 2
    Je suis la fille 1
    ...
    Je suis la fille N
    mais j'obtiens:
    Je suis la Mere
    Je suis la Mere
    Je suis la Mere
    Je suis la Mere
    Je suis la Mere
    ...
    Je suis la Mere
    Je vois pas trop comment m'en sortir, comment lui dire d'appeler la fonction de son type de classe.

    Des idées? avec plaisir

  2. #2
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    class Mere {
    public:
    virtual void Affichage(void);
    void Affichage(void) {
    printf("Je suis la Mere\n");
    }
    }
    Rassure moi dans ton code tu n'as pas écrit ça ??!! L'écriture du corps de la fonction ne doit pas se faire dans la déclaration, sauf si tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    virtual void Affichage(void) {
     
    	printf("Je suis la Mere\n");
    }
    auquel cas la fonction est considérée comme déclarée inline.

    Il ne faut pas oublier de mettre la relation d'héritage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class Fille_1 : public Mere
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  3. #3
    Membre actif
    Profil pro
    Ingenieur
    Inscrit en
    Décembre 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur

    Informations forums :
    Inscription : Décembre 2003
    Messages : 138
    Points : 280
    Points
    280
    Par défaut
    Deja dans tes declarations de classe fille il manque l heritage sur la classe mere mais je pense que c est un copier/coller ui a mal tourne

    Et perso avec le code suivant et g++ 3.2.3 j ai bien la bonne execution:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <iostream>
    using namespace std;
     
    class Mere
    {
    public:
      virtual void print(void)
      {
        cout << "Mere" << endl;
      }
    };
     
    class Fille1:public Mere
    {
    public:
      void print(void)
      {
        cout << "Fille1" << endl;
      }
    };
     
     
     
    class Fille2:public Mere
    {
    public:
      void print(void)
      {
        cout << "Fille2" << endl;
      }
    };
     
     
    int main(void)
    {
      Mere* l_mere[2];
      l_mere[1] = new Fille1();
      l_mere[1]->print();
      l_mere[2] = new Fille2();
      l_mere[2]->print();
    }

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Ok desole c'est le copier coller simplifier qui a effectivement mal tourner :p.
    Je corrige directement sur le premier post.

    Et sinon
    Citation Envoyé par quicky2000
    Et perso avec le code suivant et g++ 3.2.3 j ai bien la bonne execution
    Te renvois bien
    Fille1
    Fille2
    Et pas Mere 2 fois

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Ah oui aussi:
    je compile sous Visual Studio 2005
    Et le code utilise aussi les MFC.
    Je sais pas si c'est important.

    En tout cas chez moi ca appelle la fonction de la classe mere a chaque fois.

  6. #6
    Membre actif
    Profil pro
    Ingenieur
    Inscrit en
    Décembre 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur

    Informations forums :
    Inscription : Décembre 2003
    Messages : 138
    Points : 280
    Points
    280
    Par défaut
    Oui je confirme j ai bien obtenu Fille1 et Fille2 en affichage

    Mais je pense que Patriarch 24 a effectivement mis le doigt sur ton probleme
    Citation Envoyé par Patriarch24
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Mere {
    public:
    virtual void Affichage(void);
    void Affichage(void) {
    printf("Je suis la Mere\n");
    }
    }
    Rassure moi dans ton code tu n'as pas écrit ça ??!! L'écriture du corps de la fonction ne doit pas se faire dans la déclaration, sauf si tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    virtual void Affichage(void) {
     
    	printf("Je suis la Mere\n");
    }
    auquel cas la fonction est considérée comme déclarée inline.
    donc soit tu ecris ta fonction comme il te le dit soit tu sors l implementation de le declaration de classe comme dans le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Mere
    {
    public:
      virtual void print(void);
    };
     
    void Mere::print(void)
      {
        cout << "Mere" << endl;
      }
    A priori ce qu il est souvent conseille de faire c est de mettre les declarations dans le .h et les implementations dans le .cpp ( sauf cas particuliers comme les fonctions inline ou les template )

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Arf autant pour moi j'ai vraiment fait n'imp, ca marche bien en effet.
    dsl (oublier le virtual je le voyai alors qu'il y etait pas, j'ai hallucine)

    Merci a vous en tout cas

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par quicky2000
    Oui je confirme j ai bien obtenu Fille1 et Fille2 en affichage

    A priori ce qu il est souvent conseille de faire c est de mettre les declarations dans le .h et les implementations dans le .cpp ( sauf cas particuliers comme les fonctions inline ou les template )
    Merci pour les infos, en fait je savais tout ca c'est juste que je devais etre completement a l'ouest

  9. #9
    Membre actif
    Profil pro
    Ingenieur
    Inscrit en
    Décembre 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingenieur

    Informations forums :
    Inscription : Décembre 2003
    Messages : 138
    Points : 280
    Points
    280
    Par défaut
    pense a la balise RESOLU

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Delestage plutot!
    Le forum n'a surement pas besoin de mes betises

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

Discussions similaires

  1. appel à une fonction dans la classe Action
    Par imane_bennouna dans le forum Struts 1
    Réponses: 3
    Dernier message: 07/08/2006, 11h09
  2. Appel de fonction dans une classe
    Par saint-pere dans le forum Langage
    Réponses: 3
    Dernier message: 08/05/2006, 22h13
  3. Appel de fonction depuis une classe fille
    Par lhpp dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 26/04/2006, 22h02
  4. Appel de fonction dans une classe
    Par Seth77 dans le forum Langage
    Réponses: 8
    Dernier message: 16/01/2006, 10h32
  5. [debutant]appeller une fonction d'une classe fille et mere ?
    Par Battosaiii dans le forum Débuter
    Réponses: 1
    Dernier message: 12/11/2005, 12h56

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