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 :

construction automatique de membres


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut construction automatique de membres
    Salut à tous,

    Est il possible de demander au constructeur de ne pas construire [tout de suite] des membres au moment de l'appel du constructeur d'une classe?

    Parce que imaginons:

    class A{
    B b;
    }
    S'il n'y a pas de constructeur par défaut de B, je suis obligé de le passer à la liste d'initialisation. Le problème c'est que j'ai besoin de faire quelques opérations avant de pouvoir construire le membre b.

    Comment faire ?

  2. #2
    screetch
    Invité(e)
    Par défaut
    si tu dois faire ca il y a sans doute moyen de couper ta classe en deux. L'autre possibilité est d'avoir un B* au lieu d'un B.

  3. #3
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut
    en fait j'avais pensé aux pointeurs, mais ca m'avait pas l'air assez c++
    ca peut pas se faire avec des références ?

    pour le découpage de classe, j'essaye de regarder mais j'ai l'impression que ca fait que reporter le problème à une autre classe.

    et sinon, comment tu fais pour répondre aussi vite aux messages ?

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 300
    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 300
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mamelouk Voir le message
    en fait j'avais pensé aux pointeurs, mais ca m'avait pas l'air assez c++
    Parfois on est contraint d'utiliser des pointeurs en C++. Ce n'est pas interdit. D'ailleurs, tu es typiquement dans une situation où tu n'as pas le choix

    Citation Envoyé par mamelouk Voir le message
    ca peut pas se faire avec des références ?
    Ca dépend ce que tu veux faire exactement, mais à priori je dirais non car tu ne peux pas déclarer une référence dans l'instancier.

    et sinon, comment tu fais pour répondre aussi vite aux messages ?
    Et aussi bien?

  5. #5
    screetch
    Invité(e)
    Par défaut
    Pour le "aussi vite", c'est que des fois les gens tombent dans le "batch de reponse", je rafraichis le navigateur toute les heures et si tu as poste il y a une minute tu es dans le meme batch que celui qui a poste il y a une heure!!

    Pour le aussi bien, c'est que j'ouvre ma gueule seulement sur les sujets ou j'ai pieds, je vais pas aller causer sur le sujet des VARIANTS en COM car la j'ai peur du ridicule ^^"

    si tu veux faire un truc bien C++ utilise std::auto_ptr.
    Cela signifie que c'est un membre sous forme de pointeur (ce qu'on veut, pour pouvoir faire une initialisation plus tard) et dont on est l'unique proprietaire, c'est a dire pas de refcounting ou toute ces betises. C'est donc aussi contraignant que si tu avais b en membre, mais ca reste un pointeur. Et tu n'auras pas besoin de desallouer l'objet, l'auto_ptr s'en chargeant tout seul. Lorsque je passe des membres qui etaient "inline" dans la classe en pointeur, je passe toujours par la.

  6. #6
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut
    ouaw c'est magique. je connaissais pas ce auto_ptr, je vais voir ca

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Je ne sais pas si ça s'applique dans ton cas mais quelque chose que je fais très souvent c'est grosso modo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    namespace
    {
      B CreateB( stream& s )
      {
        int x;
        s >> x;
        return B( x );
      }
    }
    A::A( stream& s )
      : b( CreateB( s ) )
    {}
    (on peut aussi varier avec des pointeurs, des std::auto_ptr, etc..)
    En fait j'en abuse un peu même, mais j'y peux rien j'aime pas avoir du code dans le corps des constructeurs

    MAT.

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/02/2013, 15h49
  2. créer automatiquement des membres dans une classe
    Par katebe dans le forum Windows Forms
    Réponses: 15
    Dernier message: 08/01/2008, 11h21

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