Exercice 104
Énoncé
On suppose qu’on dispose de la même classe point (et donc du fichier point.h) que
dans l’exercice précédent. Créer une classe pointcol possédant les mêmes
caractéristiques que ci-dessus, mais sans faire appel à l’héritage. Quelles
différences apparaîtront entre cette classe pointcol et celle de l’exercice précédent, au
niveau des possibilités d’utilisation ?
La seule démarche possible consiste à créer une classe pointcol dans laquelle un des
membres donnée est lui-même de type point. Sa déclaration et sa définition se
présenteraient alors ainsi :
/***** fichier pointcol.h : déclaration de pointcol *****/
#include "point.h"
#include
using namespace std ;
class pointcol
{ point p ;
int cl ;
public :
pointcol (float = 0.0, float = 0.0, int = 0) ;
void colore (int coul)
{ cl = coul ;
}
void affiche ()
{ p.affiche () ; // affiche doit appeler affiche
cout << " couleur : " << cl ; // du point p pour les
// coordonnées
}
} ;
/****** définition du constructeur de pointcol *****/
#include "point.h"
#include "pointcol.h"
pointcol::pointcol (float abs, float ord, int coul) : p (abs, ord)
{ cl = coul ;
}
Apparemment, il existe une analogie étroite entre cette classe pointcol et celle de
l’exercice précédent. Néanmoins, l’utilisateur de cette nouvelle classe ne peut plus
faire directement appel aux fonctions membre héritées de point. Ainsi, pour appliquer la
méthode deplace à un objet a de type point, il devrait absolument écrire : a.p.deplace (...) ;
or, cela n’est pas autorisé ici, puisque p est un membre privé de pointcol.
249
Précédent

- 250/398

Suivant