Classes : initialisation des attributs
unProgrammeurLambda
-
UnProgrammeurLambda -
UnProgrammeurLambda -
Bonjour,
J'aurai une petite question sur le C++.
Supposons que j'ai définis une classe Machin qui possède un constructeur par défaut.
Maintenant je fais une classe Truc, qui a un attribut de type Machin.
Est ce que dans le constructeur de Truc je dois initialiser l'objet de type Machin, ou est ce que le constructeur par défaut a été automatiquement appelé (de la même manière que si je fais un Machin m1; au milieu d'une fonction)
Merci !
J'aurai une petite question sur le C++.
Supposons que j'ai définis une classe Machin qui possède un constructeur par défaut.
Maintenant je fais une classe Truc, qui a un attribut de type Machin.
Est ce que dans le constructeur de Truc je dois initialiser l'objet de type Machin, ou est ce que le constructeur par défaut a été automatiquement appelé (de la même manière que si je fais un Machin m1; au milieu d'une fonction)
Merci !
A voir également:
- Classes : initialisation des attributs
- Comment sont classés les amis sur facebook - Guide
- Comment faire des classes sur excel ✓ - Forum Excel
- Mysql error in file: /engine/classes/mysql.php at line 53 ✓ - Forum Webmastering
- Erreur Mysql - Forum MySQL
- Acces a un site particulier - Forum Mozilla Firefox
2 réponses
'lut, si tu ne spécifies pas de constructeur particulier à appeler pour ton Machin dans le constructeur voulu de Truc, alors son constructeur par défaut est appelé, c'est-à-dire celui sans arguments.
L'initialisation ce fait comme ceci dans un constructeur:
L'initialisation ce fait comme ceci dans un constructeur:
class Machin { public: Truc m_truc; // Constructeur perso pour m_truc: Machin() : m_truc(<Arguments du constructeur de Truc>) { ... // Et si tu fais ceci: m_truc = Truc(<arguments>); // Alors m_truc est d'abord construit avec le ctor par défaut/celui spécifié plus haut // puis un 2e Truc est créé avec les arguments, puis est copié via l'opérateur de copie dans m_truc // Ou via l'opérateur de mouvement en C++11 si tu fais ceci: m_truc = std::move(Truc(<arguments>)); } };
Ok, merci pour ta réponse.
Donc par exemple j'ai :
Puis dans le constructeur de Machin, je ne fais rien :
Est ce que le constructeur que j'ai définis dans Truc sera appelé ?
D'après ta réponse oui, à moins que ce qu'on appelle le constructeur par défaut ce soit juste celui qui est créé par défaut et qui ne fait rien, et qu'un constructeur sans paramètre que l'on définis sois même n'en sois pas un ?
Donc par exemple j'ai :
class Truc {
public:
Truc(); // Un constructeur sans argument que je définis dans le cpp
};
class Machin {
public:
Machin();
private:
Truc m_truc;
};
Puis dans le constructeur de Machin, je ne fais rien :
Machin::Machin()
{
}
Est ce que le constructeur que j'ai définis dans Truc sera appelé ?
D'après ta réponse oui, à moins que ce qu'on appelle le constructeur par défaut ce soit juste celui qui est créé par défaut et qui ne fait rien, et qu'un constructeur sans paramètre que l'on définis sois même n'en sois pas un ?
Est ce que le constructeur que j'ai définis dans Truc sera appelé ?Oui
ce qu'on appelle le constructeur par défaut ce soit juste celui qui est créé par défaut et qui ne fait rien [...]Un constructeur par défaut c'est juste un constructeur sans arguments, qu'il soit créé implicitement par le compilateur ou non. cf. CppReference pour plus d'infos (en Anglais).