Exercice 95
Énoncé
Soit la classe point suivante :
class point
{ int x, y ;
public :
point (int abs=0, int ord=0)
{ x = abs ; y = ord ;
}
// .....
} ;
a. La munir d’un opérateur de cast permettant de convertir un point en un entier
(correspondant à son abscisse).
b. Soient alors ces déclarations :
point p ;
int n ;
void fct (int) ;
Que font ces instructions :
n = p ; // instruction 1
fct (p) ; // instruction 2
a. Il suffit de définir une fonction membre, de nom operator int, sans argument et
renvoyant la valeur de l’abscisse du point l’ayant appelée. Rappelons que le type de
la valeur de retour (que C++ déduit du nom de la fonction - ici int) ne doit pas
figurer dans l’en-tête ou le prototype. Voici ce que pourraient être la déclaration et
la définition de cette fonction, ici réunies en une seule déclaration d’une fonction en
ligne :
operator int ()
{ return x ; }
b. L’instruction 1 est traduite par le compilateur en une conversion de p en int (par
appel de operator int), suivie d’une affectation du résultat à n. Notez bien qu’il n’y a
pas d’appel d’un quelconque opérateur d’affection de la classe point, ni d’un
constructeur par recopie (car le seul argument transmis à la fonction operator int est
l’argument implicite this).
L’instruction 2 est traduite par le compilateur en une conversion de p en int (par
appel de operator int), suivie d’un appel de la fonction fct, à laquelle on transmet le
228
Précédent

- 229/398

Suivant