aux conversions définies par l’utilisateur). Ce dernier aspect ne constitue plus
nécessairement un avantage !
Manifestement, affiche devra pouvoir accéder aux membres privés x et y de la classe
point. Il faut donc prévoir une déclaration d’amitié au sein de cette classe, dont voici la
nouvelle déclaration :
/* fichier POINT1.H */
/* déclaration de la classe point */
class point
{ int x, y ;
public :
friend void affiche (const point &) ; // const non obligatoire
point (int abs=0, int ord=0)
{ x=abs ; y=ord ;
}
} ;
Pour écrire affiche, il nous suffit d’accéder aux membres (privés) x et y de son argument
de type point. Si ce dernier se nomme p, les membres en question se notent
(classiquement) p.x et p.y. Voici la définition de affiche :
#include "point1.h" // nécessaire pour compiler affiche
#include
using namespace std ;
void affiche (const point & p)
{ cout << "Coordonnées : " << p.x << " " << p.y << "\n" ;
}
Notez bien que la compilation de affiche nécessite la déclaration de la classe point, et
pas seulement une déclaration telle que class point, car le compilateur doit connaître les
caractéristiques de la classe point (notamment, ici, la localisation des membres x et y).
Voici le petit programme d’essai demandé :
#include "point1.h"
main()
{ point a(1,5) ;
affiche (a) ;
point * adp ;
adp = new point (2, 12) ;
affiche (*adp) ; // attention *adp et non adp
}
Notez que nous n’avons pas eu à fournir le prototype de la fonction indépendante
affiche, car il figure dans la déclaration de la classe point. Le faire constituerait
d’ailleurs une erreur.
189
nécessairement un avantage !
Manifestement, affiche devra pouvoir accéder aux membres privés x et y de la classe
point. Il faut donc prévoir une déclaration d’amitié au sein de cette classe, dont voici la
nouvelle déclaration :
/* fichier POINT1.H */
/* déclaration de la classe point */
class point
{ int x, y ;
public :
friend void affiche (const point &) ; // const non obligatoire
point (int abs=0, int ord=0)
{ x=abs ; y=ord ;
}
} ;
Pour écrire affiche, il nous suffit d’accéder aux membres (privés) x et y de son argument
de type point. Si ce dernier se nomme p, les membres en question se notent
(classiquement) p.x et p.y. Voici la définition de affiche :
#include "point1.h" // nécessaire pour compiler affiche
#include
using namespace std ;
void affiche (const point & p)
{ cout << "Coordonnées : " << p.x << " " << p.y << "\n" ;
}
Notez bien que la compilation de affiche nécessite la déclaration de la classe point, et
pas seulement une déclaration telle que class point, car le compilateur doit connaître les
caractéristiques de la classe point (notamment, ici, la localisation des membres x et y).
Voici le petit programme d’essai demandé :
#include "point1.h"
main()
{ point a(1,5) ;
affiche (a) ;
point * adp ;
adp = new point (2, 12) ;
affiche (*adp) ; // attention *adp et non adp
}
Notez que nous n’avons pas eu à fournir le prototype de la fonction indépendante
affiche, car il figure dans la déclaration de la classe point. Le faire constituerait
d’ailleurs une erreur.
189
