J'ai une situation où aucun constructeur ne semble être appelé:
#include
using namespace std;
int main ()
{
class yoyo
{
public:
int i;
yoyo()
{
i = 0;
cout << "initialisé par défaut à 0" << endl;
}
yoyo (int j) : i(j)
{
cout << "initialisé à " << j << endl;
}
};
int i;
yoyo a;
cout << "Bonjour1, i: " << a.i << endl;
yoyo b(5);
cout << "Bonjour2, i: " << b.i << endl;
yoyo c = b; /* 1 */
cout << "Bonjour3, i: " << c.i << endl;
return 0;
}
La sortie est:
initialisé par défaut à 0
Bonjour1, i: 0
initialisé à 5
Bonjour2, i: 5
Bonjour3, i: 5
(Remarque: rien entre Bonjour2 et Bonjour3)
Si je modifie le programme comme suit:
#include
using namespace std;
int main ()
{
class yoyo
{
public:
int i;
yoyo()
{
i = 0;
cout << "initialisé par défaut à 0" << endl;
}
yoyo (int j) : i(j)
{
cout << "initialisé à " << j << endl;
}
};
int i;
yoyo a;
cout << "Bonjour1, i: " << a.i << endl;
yoyo b(5);
cout << "Bonjour2, i: " << b.i << endl;
yoyo c; c = b; /* 1 */
cout << "Bonjour3, i: " << c.i << endl;
return 0;
}
(La seule différence réside dans la ligne marquée par /* 1 */)
La sortie est maintenant:
initialisé par défaut à 0
Bonjour1, i: 0
initialisé à 5
Bonjour2, i: 5
initialisé par défaut à 0
Bonjour3, i: 5
Maintenant, il y a un appel au constructeur entre Bonjour2 et Bonjour3. Ma question est, pourquoi n'y a-t-il pas d'appel de constructeur (visible) dans le premier cas?