Exercice 101
Énoncé
Soient les deux classes suivantes :
class B
{ // ...
public :
B () ; // constructeur sans argument
B (int) ; // constructeur à un argument entier
// ...
} ;
class A
{ // ...
friend operator + (A, A) ;
public :
A () ; // constructeur sans argument
A (int) ; // constructeur à un argument entier
A (B) ; // constructeur à un argument de type B
// ...
} ;
a. Dans un programme contenant les déclarations :
A a1, a2, a3 ;
B b1, b2, b3 ;
les instructions suivantes seront-elles correctes et, si oui, que feront-elles ?
a1 = b1 ; // instruction 1
b1 = a1 ; // instruction 2
a3 = a1 + a2 ; // instruction 3
a3 = b1 + b2 ; // instruction 4
b3 = a1 + a2 ; // instruction 5
b. Comment obtenir le même résultat sans définir, dans A, le constructeur A(B) ?
a.
Instruction 1
Il faut distinguer 2 cas :
Si A n’a pas surdéfini d’opérateur d’affectation d’un objet de type B à un objet de type A,
il y aura conversion de b1 dans le type de A (par appel du constructeur A(B)), suivie
d’une affectation à a1 (en utilisant soit l’opérateur d’affectation par défaut de A, soit
éventuellement celui qui aurait pu y être surdéfini).
238
Précédent

- 239/398

Suivant