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 :

Appeller constructeur par défaut dans une liste d'initialisation


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Appeller constructeur par défaut dans une liste d'initialisation
    Voilà j'ai une classe dont des membres sont des références.
    Autrement dit, nous somme obligés de les initialiser dans la liste d'initialisation.
    Je souhaiterai savoir s'il est possible de garder ces références en les initialisant avec le constructeur par défaut au sein de la classe.

    Ex : aujourd'hui je sais seulement faire cela. Je souhaiterait rendre l'instanciation de B et de C transparente lorsque l'on instancie A.

    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
    #include "b.h"
    #include "c.h"
    Class A {
     
    public :
    A(C & arg1 , C & arg2) : b(arg1) , c(arg2){};
     
    private:
    	B & b ;
    	C & c ;
    }
     
    int main(int argc, char **argv)
    {
    	B b ;
    	C c ;
    	A a(b,c);
     
    }
    Est-ce possible ?
    Merci d'avance pour vos réponses !

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    La bonne question à se poser, c'est de savoir si ta classe A doit, effectivement, disposer de références sur B et sur C.

    S'il arrive effectivement que ce soit le cas, l'expérience montre que c'est, malgré tout, une situation exceptionnelle

    De prime abord, j'aurais tendance (à défaut de savoir à quoi servent réellement A, B et C) à dire que ce n'est pas le cas, et que ce qu'il te faut, ce sont, simplement des membres sous forme de valeur.

    N'oublie, en outre, pas qu'il faut veiller à ce que la référence fasse, en permanence... référence à un objet existant.

    Cela implique:
    1. Que tu dois, effectivement, passer par la liste d'initialisation dans le constructeur (plus tard, c'est trop tard )
    2. Que tu dois impérativement veiller à ce que l'objet référencé ait une durée de vie supérieure à celle de l'objet dans lequel il est référencé.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    J'ai effectivement besoin d'une référence pour B et C. Puisque ce sont effectivement des objets ayant une durée de vie supérieure à A.

    La solution que j'ai actuellement adopté sont de d'y faire par référence par pointeur.
    Ces pointeurs sont initialisés à NULL dans le constructeur.

    Je souhaitais utiliser des références pour leur côté pratique en les renseignant initialement avec un objet par défaut.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Les références ne sont pas réassignables. Elles doivent donc être initialisées au moment de leur définition.
    Tu peux utiliser une enveloppe de type Boost.Optional. ou changer effectivement en pointeur.
    En revanche, comme Koala, je me demande si le design a été poussé jusqu'au bout.

Discussions similaires

  1. sélectionner un élément par défaut dans une liste déroulante
    Par touf35 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/06/2008, 18h08
  2. valeur par défaut dans une liste déroulante
    Par fastpulse dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/01/2008, 10h02
  3. Réponses: 4
    Dernier message: 05/06/2007, 09h16
  4. Réponses: 8
    Dernier message: 27/06/2006, 11h47
  5. Valeur par défaut dans une liste déroulante
    Par zoom61 dans le forum IHM
    Réponses: 1
    Dernier message: 12/06/2006, 09h00

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