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 automatique du constructeur d'une classe mère?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut Appel automatique du constructeur d'une classe mère?
    Bonsoir,

    J'ai plusieurs questions! Si j'hérite une classe B d'une classe A et que cette classe A, la classe mère, possède un constructeur mais que sa classe fille, la classe B, n'en possède pas... Est-ce que le constructeur de la classe mère sera appelé automatiquement lors de la création d'un objet de type B?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A
    {
    public:
       A(...) { /* ...*/} //constructeur
    };
     
    class B: public A
    {
    public:
       //pas de constructeur
    }
    Ou dois-je spécifier un constructeur à la classe B qui appel le constructeur de la classe mère:
    Merci d'avance!

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Si B n'a pas de constructeur , il faut que A ait un moins un constructeur par défault.

    En effet, si A en a constructeur par défault ; pas de problème ca compile , les objets sont iniatilisé par défault.
    Mais si A n'en a pas , ca compile pas et tu est obligé de définir un constructeur pour B pour envoyer des arguments à A.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Oui c'est vrai que c'est logique que c'est le constructeur par défaut de la classe mère qui sera appelée...

    Donc si ma classe A ne possède pas de constructeur par défaut mais par exemple un constructeur de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A(int u, float v) {/* ... */}
    Il faut absolument que je redéfinisse un constructeur similaire à la classe B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B(int u, float v): A(u,v) {/* ... */}

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Oui.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Ok, merci beaucoup!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 15
    Par défaut
    Citation Envoyé par Rodrigue Voir le message
    Oui c'est vrai que c'est logique que c'est le constructeur par défaut de la classe mère qui sera appelée...

    Donc si ma classe A ne possède pas de constructeur par défaut mais par exemple un constructeur de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A(int u, float v) {/* ... */}
    Il faut absolument que je redéfinisse un constructeur similaire à la classe B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B(int u, float v): A(u,v) {/* ... */}
    Non, tu pourrais aussi définir un constructeur de B comme ca à la place:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    B(int u): A(u,0.0) {/* ... */}
    [/

  7. #7
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    C'est du détail d'implémentation.
    ce qui ne change pas , c'est qu'il est obliger de déclarer un constructeur pour sa classe B.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  8. #8
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    C'est du détail d'implémentation.
    ce qui ne change pas , c'est qu'il est obliger de déclarer un constructeur pour sa classe B.
    Oui, tout à fait . Je trouve que les constructeurs des classes mères devraient être s'ils ne sont pas "surchagés" (j'entends par là avoir la même déclaration) disponibles dans les classes filles...

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

Discussions similaires

  1. Appel d'un constructeur d'une classe Java
    Par Invité dans le forum MATLAB
    Réponses: 2
    Dernier message: 09/02/2015, 09h31
  2. Réponses: 7
    Dernier message: 27/01/2009, 08h25
  3. [POO]Appelé une méthode d'une classe mère
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2005, 14h44
  4. Réponses: 5
    Dernier message: 20/11/2005, 11h15
  5. Réponses: 3
    Dernier message: 06/11/2005, 18h02

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