Bonjour !
Je suis de nouveau confronté à un problème "basique" me sembe-t-il... Sans trouver d'indice dans la FAQ (probablement mal cherché)...
J'ai un objet d'une classe "Contenant" qui a pour donnée membre un objet d'une classe "Contenu". "Contenu" a un constructeur sans paramètres et un constructeur prenant un string en argument.
Je peux initialiser facilement Contenu par la liste d'initialisation du constructeur de contenant en lui passant un string.
Mais un problème se pose lorsque je dois construire le string en plusieurs étapes avant de le passer au constructeur de Contenu. Ainsi, si je fais ce traitement dans le corps du constructeur, je ne sais pas si mon objet "Contenu" a deja été initialisé (Je suppose que oui avec le constructeur "par défaut") et/ou comment appeler son constructeur correctement une fois que j'ai réussi à construire mon string.
En bref, la question basique c'est "Comment appeler correctement le constructeur de l'objet "Contenu", dans le corps du constructeur de "Contenant". Pour une fois je prefererais eviter d'utiliser un pointeur et de gerer l'objet en memoire dynamique.
Un exemple ci-dessous ou l'on voudrait concatener le compteur d'instance à la chaine de "Contenant" avant de la passer au constructeur de "Contenu".
Or si je veux concatener à "message" la valeur de compteur_instance, je dois, je pense faire quelque chose du style :
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
25
26
27
28
29
30
31
32
33
34
35
36
37 class CContenu { private: std::string m_message; public: CContenu() :m_message(std::string("Par defaut")) {} CContenu(std::string message) :m_message(message) {} } class CContenant { private: static int compteur_instance; CContenu m_contenu; public: // Premier exemple ou on ne fait que passer le message au contenu, pas de souci CContenant(std::string message) :m_contenu(message) { CContenant::compteur_instance++; } } // initialisation de la variable statique CContenant::compteur_instance=0;
Or je ne pense pas pouvoir faire ca dans la liste d'initialisation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ostringstream oss; oss << CContenant::compteur_instance; std::string messageFinal=message+oss.str();
Donc, si je le met dans le corps du constructeur, comment faire pour initialiser m_contenu avec messageFinal ?
Merci d'avance pour votre aide et désolé de poser une question si basique mais je crois que mes cours de C++ sont trop loins derrière moi...
B.
Partager