Constructeur par défaut appelé après constructeur d'initialisation ?
Bonjour,
Boite et caillou sont deux classes.
On a la classe Boite :
Code:
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
| class Boite
{
private :
int taille;
int nbMax;
Caillou c;
public :
Boite(void)
{
cout << "Constructeur par defaut de Boite" << endl;
setTaille(20);
setNbMax(5);
setCaillou(c);
}
Boite(int t, int nb, const Caillou& c)
{
cout << "Constructeur par initialisation de Boite" << endl;
setTaille(t);
setNbMax(nb);
setCaillou(c);
}
~Boite()
{
cout << "Destructeur de Boite" << endl;
}
// setters et getters classique dont 3 sont cités plus haut
} |
Et on a la classe Caillou :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Caillou
{
private :
string couleur;
public :
Caillou(void)
{
cout << "Constructeur par defaut de Caillou" << endl;
setCouleur("jaune");
}
Caillou(string c)
{
cout << "Constructeur par initialisation de Caillou" << endl;
setCouleur(c);
}
~Caillou()
{
cout << "Destructeur de Caillou" << endl;
}
// setters et getters classique dont 1 est cité plus haut
} |
Dans mon programme principal(main), j'effectue ceci :
Code:
1 2
|
Boite b(0, 0, Caillou("bleu")); |
Tout marche à merveille.. Sauf que je me rend compte en traçant le programme qu'il invoque les constructeurs dans cet ordre :
Citation:
Constructeur par initialisation de l'objet Caillou
Constructeur par defaut de l'objet Caillou
Constructeur par initilisation de l'objet Boite
Destructeur de l'objet Caillou
Or, je m'attendais à ce que les constructeurs appelés soient :
Citation:
Constructeur par initilisation de l'objet Caillou
Constructeur par initilisation de l'objet Boite
Du coup, je ne comprend pas..
Auriez-vous une idée du soucis(si il y en a un) ?
Merci.
ps : Mon programme ne se limite pas à 2 classes. Il s'agit ici d'un extrait complet(tout ce qui est en rapport aux 2 classes y est).
Edit :
Je rajoute des infos :
Quand je fais du pas à pas avec le debugger :
1] je passe bien par le constructeur d'initialisation de Caillou.
2] A la fin du constructeur d'initialisation de Caillou, je passe sur la déclaration du constructeur d'initialisation de Boite.
3] En faisant un step into, je ne me retrouve pas dans le constructeur d'initialisation de Boite mais dans le constructeur par défaut de Caillou.
4] Dans ce constructeur, il n'y a que des erreurs. Quand j'essaie d'accèder à la mémoire de l'objet et quand je passe sur le setCouleur.
5] A la fin de ce constructeur, je repasse sur le constructeur d'initialisation de Boite. A la ligne se trouvant après la déclaration du constructeur.
6] A la fin du constructeur d'initialisation de Boite, je passe au destructeur de Caillou et là erreur.
> Il est à noter que lors du débogage, il y a des erreurs mais lancer normalement, il n'y a aucune erreur.