Exercice 100
Énoncé
a. Quels résultats fournira le programme suivant :
#include
using namespace std ;
class point
{ int x, y ;
public :
point (int abs=0, int ord=0) // constructeur 0, 1 ou 2 arguments
{ x = abs ; y = ord ;
cout << "$$ construction point : " << x << " " << y << "\n" ;
}
friend point operator + (point, point) ; // point + point --> point
void affiche ()
{ cout << "Coordonnées : " << x << " " << y << "\n" ; }
} ;
point operator+ (point a, point b)
{ point r ;
r.x = a.x + b.x ; r.y = a.y + b.y ;
return r ;
}
main()
{ point a, b(2,4) ;
a = b + 6 ; // affectation 1
a.affiche() ;
a = 6 + b ; // affectation 2
b.affiche() ;
}
b. Même question en supposant que l’opérateur + a été surdéfini comme une fonction
membre et non plus comme une fonction amie.
c. Même question en supposant que l’opérateur + est défini ainsi :
friend point operator + (point &, point &) ;
d. Même question en supposant que l’opérateur + est défini ainsi :
friend point operator + (const point &, const point &) ;
a. L’évaluation de l’expression b + 6 de la première affectation se fait en utilisant
l’opérateur + surdéfini pour la classe point, après avoir converti l’entier 6 en un point
(par appel du constructeur à un argument). Le résultat, de type point, est alors affecté
à a.
L’instruction d’affectation 2 se déroule de façon similaire (conversion de l’entier 6
236
Énoncé
a. Quels résultats fournira le programme suivant :
#include
using namespace std ;
class point
{ int x, y ;
public :
point (int abs=0, int ord=0) // constructeur 0, 1 ou 2 arguments
{ x = abs ; y = ord ;
cout << "$$ construction point : " << x << " " << y << "\n" ;
}
friend point operator + (point, point) ; // point + point --> point
void affiche ()
{ cout << "Coordonnées : " << x << " " << y << "\n" ; }
} ;
point operator+ (point a, point b)
{ point r ;
r.x = a.x + b.x ; r.y = a.y + b.y ;
return r ;
}
main()
{ point a, b(2,4) ;
a = b + 6 ; // affectation 1
a.affiche() ;
a = 6 + b ; // affectation 2
b.affiche() ;
}
b. Même question en supposant que l’opérateur + a été surdéfini comme une fonction
membre et non plus comme une fonction amie.
c. Même question en supposant que l’opérateur + est défini ainsi :
friend point operator + (point &, point &) ;
d. Même question en supposant que l’opérateur + est défini ainsi :
friend point operator + (const point &, const point &) ;
a. L’évaluation de l’expression b + 6 de la première affectation se fait en utilisant
l’opérateur + surdéfini pour la classe point, après avoir converti l’entier 6 en un point
(par appel du constructeur à un argument). Le résultat, de type point, est alors affecté
à a.
L’instruction d’affectation 2 se déroule de façon similaire (conversion de l’entier 6
236
