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 :

Bonnes pratiques des constructeurs multiples


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut Bonnes pratiques des constructeurs multiples
    Bonjour,

    J'aimerai savoir comment réduire lignes de codes en doublon dans une classe avec constructeurs multiple.

    Comment par exemple faire appelle au constructeur par défaut depuis un autre constructeur (de la même classe).

    Faut il créer pléthore de fonctions privé qui initialisent une partie de la classe et les appeler suivant le constructeur ?

  2. #2
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Le placement new :
    P.S. je ne sais pas si c'est une bonne pratique.

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Définitivement une mauvaise pratique.
    Sinon, il n'y a pas vraiment de bonne solution à ce problème.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Peut-être passer par une factory?

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    La règle généralement applicable est de retarder la construction d'un objet jusqu'à ce que tu dispose de toutes les informations pour le créer "d'une traite", ou du moins, jusqu'à ce que tu dispose de suffisemment d'informations pour te permettre d'en créer un instance cohérente...

    Au niveau des constructeurs, il faut savoir que, l'idéal, c'est quand même de préférer la liste d'initialisation à une définition au sein du constructeur... du moins autant que faire se peut.

    De plus, et bien qu'il soit effectivement possible d'appeler des méthodes d'une classe quand on se trouve dans le constructeur, cela reste malgré tout la moins bonne des mauvaises idées

    Ceci dit, n'oublie pas non plus la possibilité qui t'es donnée de fournir des valeurs par défaut à tes arguments, sous réserve d'en respecter les règles...

    En réfléchissant aux arguments qui sont le plus susceptibles d'être fournis (et donc de ne pas utiliser la valeur par défaut), il peut devenir possible de t'éviter l'écriture de quelques constructeurs ... mais il faut alors veiller à éviter les conflits entre les versions des constructeurs avec valeur par défaut et les autres
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Salut,

    le C++ ne permet pas pour l'instant d'appeler plusieurs constructeurs, mais c'est une suggestion pour le C++0x. (la nouvelle norme qui n'est pas encore sortie)

  7. #7
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par TheDrev Voir le message
    Bonjour,

    J'aimerai savoir comment réduire lignes de codes en doublon dans une classe avec constructeurs multiple.

    Comment par exemple faire appelle au constructeur par défaut depuis un autre constructeur (de la même classe).

    Faut il créer pléthore de fonctions privé qui initialisent une partie de la classe et les appeler suivant le constructeur ?
    Bref, pour simplifier: la seule solution à l'heure actuelle est de faire ceci:

    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
    class the_class 
    {
    private:
      void init(param...)
      {
      }
    public:
      the_class(param_list_1)
      {
        init(...);
      }
      the_class(param_list_2)
      {
        init(...);
      }
    };
    La prochaine version du standard autorisera l'appel d'un constructeur de la classe dans la liste d'initialisation, ce qui permettre de mutualiser le code dans un constructeur particulier.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

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

Discussions similaires

  1. Bonnes pratiques des plans de maintenance
    Par Mothership dans le forum Administration
    Réponses: 7
    Dernier message: 04/09/2008, 10h09
  2. interet des constructeurs multiples
    Par pseudobidon57 dans le forum Langage
    Réponses: 2
    Dernier message: 13/06/2007, 12h33
  3. De la bonne pratique des variables globales...
    Par say dans le forum C++Builder
    Réponses: 9
    Dernier message: 25/11/2005, 09h47
  4. De la bonne pratique des includes...
    Par say dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/11/2005, 11h15

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