Exercice 112
Énoncé
Quels seront les résultats fournis par ce programme :
#include
using namespace std ;
class A
{ int na ;
public :
A (int nn=1)
{ na = nn ; cout << "$$construction objet A " << na << "\n" ;
}
} ;
class B : public A
{ float xb ;
public :
B (float xx=0.0)
{ xb = xx ; cout << "$$construction objet B " << xb << "\n" ;
}
} ;
class C : public A
{ int nc ;
public :
C (int nn= 2) : A (2*nn+1)
{ nc = nn ;
cout << "$$construction objet C " << nc << "\n" ;
}
} ;
class D : public B, public C
{ int nd ;
public :
D (int n1, int n2, float x) : C (n1), B (x)
{ nd = n2 ;
cout << "$$construction objet D " << nd << "\n" ;
}
} ;
main()
{ D d (10, 20, 5.0) ;
}
La construction d’un objet de type D entraînera l’appel des constructeurs de B et de C,
lesquels, avant leur exécution, appelleront chacun un constructeur de A : dans le cas de
B, il y aura appel d’un constructeur sans argument (puisque l’en-tête de B ne mentionne
pas de liste d’arguments pour A) ; en revanche, dans le cas de C, il s’agira (plus
classiquement) d’un constructeur à un argument, comme mentionné dans l’en-tête de C.
Notez bien qu’il y a création de deux objets de type A. Voici les résultats obtenus :
$$construction objet A 1
$$construction objet B 5
266
Précédent

- 267/398

Suivant