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 :

Constructeurs et polymorphisme


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Par défaut Constructeurs et polymorphisme
    Bonjour,

    J'aimerais avoir une petite confirmation sur le problème suivant car je trouve que la méthode est un peu lourde :

    J'ai une classe de base : mere et des classes filles. La classe mere contient un pointeur que je veux initialiser lors de l'instanciation de toutes mes classes, pour cela j'ai un constructeur dédié.
    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
    class mere
    {
    protected: 
       UneClass *ObjPtr;
    public:
       mere();
       mere(UneClass *UnObj)
    };
     
     
    mere::mere(UneClass *UnObj)
    {
       // Initialisation
       ObjPtr = UnObj;
    }
    Puis dans les classes filles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class fille : public mere
    {
    public:
       fille();
       fille(UneClass *UnObj);
    };
    Or quand j'appelle le constructeur de la classe fille avec le second constructeur fille(UneClass *UnObj), c'est le constructeur mere() qui est appelé en premier alors que j'aimerais que ce soit mere(UneClass *UnObj), qui en pratique n'est jamais appelé, pour traiter directement l'affectation (et le code qui va avec) uniquement dans la class mere. Alors qu'ici je suis obligé de redéfinir ce bout de code dans toute les classes filles.

    Donc existe t-il un moyen de faire ça ou faut-il redéfinir l'affectation dans toutes les classes fille (en passant éventuellement par une méthode placée dans la classe mere) ?

    Merci pour vos conseils

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fille::fille(UneClass *UnObj) :
    mere(Obj)
    {
     
    }

  3. #3
    Membre très actif
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Par défaut
    Merci.

    Est-ce que cette construction est spécifique aux constructeurs ? Je pense que oui car pour les autres méthodes on utilise la virtualité.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Oui, ça s'appelle la liste d'initialisation et ça sert à construire directement les variables membres avec un autre constructeur que celui par défaut si nécessaire ; ça sert aussi à spécifier quel constructeur de la classe mère appeler, comme ici.

    Tu peux jeter un oeil à la FAQ, ou à un cours C++ avec comme mot-clé "liste d'initialisation" si tu veux en savoir plus.

  5. #5
    Membre très actif
    Inscrit en
    Décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 188
    Par défaut
    J'avais bien vu la FAQ concernant les liste d'initialisations mais je n'avais pas fait le rapprochement direct avec mon cas. Je vais effectivement utiliser cette méthode intensivement !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/11/2007, 13h46
  2. [VB6]Déclaration d'un Constructeur Spécialisé
    Par TagadaTsoin dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 26/05/2004, 14h09
  3. [Constructeur]Pb avec la surcharge d un constructeur
    Par cmoulin dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2004, 09h29
  4. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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