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 :

Constructeur d'un fils


Sujet :

C++

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut Constructeur d'un fils
    Salut,
    j'ai pti probleme tout simple :
    -j'ai une classe pere qui a besoin d'une adresse pour mon port serie
    -j'ai une classe fils que j'appelle avec le constructeur et dedans le constructeur fils je lui donne l'adresse.

    J'aimerai savoir si il est possible de donner l'adresse au pere avant que le pere lance les fonction de son constructeur.
    voila mon appel:
    et dans mon code de constructeur voila mes 2 constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Fils::Fils(int add)
    {
        adresse=add; //ici l'adresse est une donne protected de la classe pere
    }
     
    ...
     
    Pere::Pere()
    {
        InitCom();
    }
    Le Probleme est le suivant : ben la fonction InitCom() est lancer avant que j'initialise la variable addresse, du coup j'aimerai que addresse soit initialiser avant d'appeler ma fonction
    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Si la classe de base a besoin de données pour pouvoir être instanciée correctement, elle doit disposer d'un constructeur permettant de lui fournir.
    Ensuite, par chaînage de constructeur, les données fournies au constructeur de la classe dérivée peuvent être transmise au constructeur de la classe de base.
    En règle générale, chaque classe est résponsable d'initialiser ses variables membres, si ce n'est pas le cas c'est souvent que la conception est mauvaise.

    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
    class Base
    {
    public: /* protected marche aussi dans ce cas */
      Base(int add);
     
    protected:
      int addresse_;
    };
     
    class Derived : public Base
    {
      Derived(int add);
    };
     
    Base::Base(int add)
    {
      adresse_ = add;
    }
     
    Derived::Derived(int add)
     : Base(add)  // Appel du constructeur de la classe de base
    {
      ...
    }

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut
    je m'auto repond et je resolu mon probleme mais j'aimerai une confirmation pour savoir si c'est une bonne solution ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fils::fils(int add)
    :Pere(add)
    {}
    et j'ai fait un constructeur pere qui initialise son atribut protected address a la valeur de add.
    Mais je pensai que lorsque l'on appeler un objet deriver comme fils alors le sontructeur par defaut de Pere sera lancer ... cela ne risque pas de lancer 2 fois le contructeur de pere ? (1 sans parametre "Pere()" et un autre que j'apelle dans mon initialisation ? "Pere(add)")
    Merci[/code]

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut
    oki merci VoidSeer
    ça confirma ce que j'ai trouver
    Probléme resolu

  5. #5
    Membre éprouvé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 950
    Par défaut
    non, d'apres mes maigres conniassance, c'est ainsi qu'il faut faire, en effet, il n'est pas appelé nativement...

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut
    euh je reouvre mon sujet car j'ai un pti truc qui me chagrinne ...
    en fait il veut absolument que mon constructeur Pere() sans param existe alors que je ne l'utilise pas ...
    C'est normal ?

  7. #7
    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
    Les constructeurs par défaut sont souvent appelés sans qu'on le voit. Est-ce que par exemple ta classe dérivée aurait d'autres constructeurs ? Sur quelle ligne de code se trouve l'erreur ?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut
    L'erreur est en fait une erreur de link comme quoi il ne trouve pas le constructeur de mon pere.... et quand je rajoute le constructeur par defaut : alors miracle pus de ereur de link :-/
    ça m'embete un peu de mettre un constructeur qui sert a rien et que personne n'apelle ...

    EDIT : oups c'est la honte je l'avai déclarer mais pas definit ...
    c'est pour ça c'est que j'ai aps l'habitude de mettre des constructeur en protected du coup je l'avai planquer et il etait declarer alors que y'en a pas besoin.
    Désolé pour le dérangement.
    Problème résolu

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par défaut
    IL est fort possible qu'il soit utilisé sans que tu en soit conscient
    declare le private ou explicit, et cela te permettra sans doute de savoir où il est utilisé.

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

Discussions similaires

  1. Création du constructeur fils
    Par johnkro dans le forum Langage
    Réponses: 11
    Dernier message: 13/03/2008, 09h06
  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. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52
  4. [DOM] suppression d'un noeud fils xml en JAVA
    Par alexandre54 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 20/03/2003, 09h44
  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