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 :

problème constructeur + héritage


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut problème constructeur + héritage
    Bonjour

    Je suis débutant en c++, je travaille sur les constructeurs. Je souhaiterai appeler le constructeur de la classe Mere, pour initialiser le constructeur de la class Fille. La class Mere à deux paramètres _nb1 et _nb2 et la classe Fille n'a que _nb3.

    Je voudrais savoir si c'est possible d'appeler le constructeur de la classe Mere pour récupérer l'initialisation de la classe Mere, et initialiser le paramètre en plus de la class Fille.

    Donc ça donnerai par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Mere m1(32,44);
     
    Fille f1(5)
    Admettont que j'ai aussi une fonction affiche dans la classe Fille
    Est donc moi j'aimerai obtenir le résultat suivant :

    32, 44 ,5

    Car ça marche, j'appel bien le constructeur de la class Mere mais seulement je récupère les valeurs par défaut de _nb1 et _nb2 et donc j'obtient cela :

    0,0,5

    Est ce quelqu'un peut m'aider voici mon code ---------------------

    Il est pas très long, il y a deux class (Mere et fille) et dans c'est deux classe il y a les constreurs et la fonction affich()



    Merci, d'avance pour votre aide

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include <iostream>
    #include <conio.h>
    using namespace std;
     
    // Class Mere
    class Mere  
    {
    protected:
          int _nb1;
          int _nb2;
    public:
           Mere(int nb1 = 0, int nb2 = 0){_nb1 = nb1; _nb2 = nb2;}
           void affiche() const;
    };
     
    // class Fille
    class Fille : public Mere 
    {          
          int _nb3;
    public:
           // Constructeur par défaut
           Fille (int nb3 = 0) {_nb3 = nb3;}
     
           // Deuxième constructeur
           Fille(int nb3, int nb1, int nb2 );
           void affiche() const;
    };
     
     
    void Mere::affiche() const
    {   
        cout << "Nombre  1 :" << _nb1 << endl
        << "Nombre  2 : " << _nb2 <<endl;
    }
     
    Fille :: Fille (int nb3, int nb1,int nb2) : Mere(nb1,nb2)
    {
          _nb3 = nb3;
          _nb1 = nb1;
          _nb2 = nb2;
    }
     
    void Fille::affiche() const
    {  
     
        cout << "Nombre 3 : " <<_nb3 << endl
        << "Nombre  1 :" << _nb1 << endl
        << "Nombre  2 : " << _nb2 <<endl;
    }
     
    int main()
    {
        Mere m1(32,44);
        m1.affiche();
     
        Fille f1(5); 
        f1.affiche();
     
        getch();
        return 0;
    }

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    bonsoir

    les balises code SVP

    une classe dérivée est une classe plus spécialisée en principe. si le constructeur de la classé mère demande 2 paramètres, alors le constructeur équivalent de la classe fille demandera au moins 2 paramètres (ceux de la classe mère + spécificité de la classe dérivée)

    d'après ton code et tes explications tu n'as pas compris comment fonctionnait l'héritage. ça ne veut pas dire on construit dans le code appelant un objet de la classe de base puis un objet de la classe dérivée qui récupère les infos de la classe de base.

    dans ton main


  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Fille::Fille(int a, int b, int c) : 
      Mere(a, b),
      maVariable(c)
    {
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    arf, j'ai pas regardé l'implémentation du constructeur. j'ai vu qu'il appelait celui de la classe mère et je me suis dit c'est bon c'est celui-là...

    ( need to sleep )

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    Merci bigboomshakala de m'avoir répondu aussi vite,

    C'est vrai que je n'ai pas du tout l'esprit orienter objet, je débute il faut du temps pour trouver ces marques.

    J'avais compris que la classe dérivé, pouvait initialiser les variables membre de la classe mère. Mais moi, je me suis dit que la classe Mere à des varialbes et la classe fille à besoin des variables de la classe mere + des varialbes supplémentaires, c'est pour cela qu'ont la dérive. Et je pensais que si en intenciait la classe MERE, la classe fille pouvais récupérer l"intenciation de la classe MERE et intencier seulement c'est propre varialbe membre de sa classe, mais techniquement est ce que c'est possible ou non ???????

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    JolyLoic, tu peu détaillé un peu plus ton explication merci

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par BOLARD
    Et je pensais que si en intenciait la classe MERE, la classe fille pouvais récupérer l"intenciation de la classe MERE
    c'est fait en interne. quand tu crée une fille, ça crée une mère puis ce qui est spécifique à la fille. si un constructeur de la classe mère n'est pas explicitement appelé dans un constructeur de la classe fille alors c'est le constructeur par défaut de la classe mère qui sera appelé. tu as aussi la possibilité de spécifier le constructeur de la classe mère a utiliser (cf. le code de Jolyloic, on appelle explicitement un constructeur dans la liste d'initialisation)

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Et c'est mieux comme ça, on initialise les données avantle corps du constructeur, à la création des variables. La classe mère s'occupe toute seule de nb1 et nb2.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    Salut bigboomshakala


    C'est bien ce que je voulais faire, est ce que je à fait Jolyloic, c'est ce que j'ai fait dans mon code sauf, que lui pour la variambe membre c il utilise une fonction d'ailleur je comprend pas bien car il a pas déveoppez son exemple ::

    Mais moi j'ai bien appelé explicitement le constructeur de la classe mere, si tu regarde bien mon code, j'ai deux constructeur dans la classe fille : par défaut, et le deuxième qui appel explicitment le constructeur de la classe mere

    Le premier par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Constructeur par défaut 
     Fille (int nb3 = 0) {_nb3 = nb3;}
    Et le deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Fille :: Fille (int nb3, int nb1,int nb2) : Mere(nb1,nb2) 
    { 
          _nb3 = nb3; 
          _nb1 = nb1; 
          _nb2 = nb2; 
    }

    Pour tant même en faisant comme ça j'obtient pas le résultat attendu

    Je récupère que les valeurs par défaut du constructeur de la classe mere c'est à dire à dire _nb1 et _nb2 = 0.

    Est moi je voudrais récupérer les valeurs de l'instenciation.

    exemple :

    Mere m1(22,33);

    Fille f1(5);

    f1.affich();

    Moi quand j'affiche f1 je veux pas obtenir :
    _nb1 = 0, _nb2 = 0, _nb3 = 5

    Mais je veut obtenir
    _nb1 = 22 , _nb2 = 33 , _nb3 = 5

    Je suis désolé d'insister, mais pour l'instant je sais toujours pas comment il faut faire

    Est ce quelqu'un a la solution à mon problème ou non, car ce que vous me dite de faire, je le fait dans mon code, si vous le regarder bien...


    Miles tu peux développez un peu plus ton explication, merci............

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut Re: problème constructeur + héritage
    cf. page cours C++ de Developpez.com et FAQ chercher "liste d'initialisation"

    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
    #include <iostream>
    using namespace std;
     
    class Mere 
    {
    protected:
          int _nb1;
          int _nb2;
    public:
           Mere(int nb1 = 0, int nb2 = 0) : _nb1(nb1), _nb2(nb2) {}
           virtual void affiche() const;
    };
     
    class Fille : public Mere
    {         
          int _nb3;
    public:
           Fille (int nb3 = 0) : Mere(), _nb3(nb3) {}
           Fille(int nb1, int nb2,int nb3) : Mere(nb1,nb2),_nb3(nb3) {}
           void affiche() const;
    };
     
     
    void Mere::affiche() const
    {   
        cout << "Nombre 1 :" << _nb1 << endl;
        cout << "Nombre 2 : " << _nb2 <<endl;
    }
     
    void Fille::affiche() const
    {
        Mere::affiche(); 
        cout << "Nombre 3 : " <<_nb3 << endl;
    }
     
    int main(int argc,char* argv[])
    {
      Fille f(1,2,3);
      f.affiche();
      return 0;
    }

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Points : 49
    Points
    49
    Par défaut
    Salut bigboomshakala

    Je te remercie encore, pour toute ces informations que tu m'as fournies,

    Bonnes journées


    Le sujet est résolu

Discussions similaires

  1. Problème constructeurs héritage
    Par beginner936 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 20/09/2013, 14h01
  2. problème d'héritage au niveau du constructeur
    Par khadijadadou dans le forum Débuter
    Réponses: 1
    Dernier message: 16/08/2013, 18h03
  3. Problème d'héritage et constructeurs
    Par popy67 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 23/11/2010, 21h49
  4. probléme d'héritage constructeur
    Par bdptaki dans le forum Langage
    Réponses: 2
    Dernier message: 07/01/2009, 20h39
  5. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 28/04/2005, 23h17

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