#include // pour NULL
struct element // structure d'un élément de liste
{ element * suivant ; // pointeur sur l'élément suivant
void * contenu ; // pointeur sur un objet quelconque
} ;
class liste
{ element * debut ; // pointeur sur premier élément
element * courant ; // pointeur sur élément courant
public :
liste () // constructeur
{ debut = NULL ;
courant = debut ; // par sécurité
}
~liste () ; // destructeur
void ajoute (void *) ; // ajoute un élément en début de liste
void * premier () // positionne sur premier élément
{ courant = debut ;
if (courant != NULL) return (courant->contenu) ;
else return NULL ;
}
void * prochain () // positionne sur prochain élément
{ if (courant != NULL)
{ courant = courant->suivant ;
if (courant != NULL) return (courant->contenu) ;
}
return NULL ;
}
int fini () { return (courant == NULL) ; }
} ;
liste::~liste ()
{ element * suiv ;
courant = debut ;
while (courant != NULL )
{ suiv = courant->suivant ; delete courant ; courant = suiv ; }
}
void liste::ajoute (void * chose)
{ element * adel = new element ;
adel->suivant = debut ;
adel->contenu = chose ;
debut = adel ;
}
2. Comme nous le demande l’énoncé, nous allons donc créer une classe liste_points
par :
class liste_points : public liste, public point
Notez que cet héritage, apparemment naturel, conduit néanmoins à introduire, dans la
classe liste_points, deux membres donnée (x et y) n’ayant aucun intérêt par la suite.
En revanche, la création des fonctions membre demandées devient extrêmement
simple. En effet, la fonction d’insertion d’un point en début de liste peut être la
fonction ajoute de la classe liste : nous n’aurons donc même pas besoin de la
surdéfinir. En ce qui concerne la fonction d’affichage de tous les points de la liste
(que nous nommerons également affiche), il lui suffira de faire appel :
– aux fonctions premier, prochain et fini de la classe liste pour le parcours de la liste
de pointsþ;
– à la fonction affiche de la classe point pour l’affichage d’un point.
271
struct element // structure d'un élément de liste
{ element * suivant ; // pointeur sur l'élément suivant
void * contenu ; // pointeur sur un objet quelconque
} ;
class liste
{ element * debut ; // pointeur sur premier élément
element * courant ; // pointeur sur élément courant
public :
liste () // constructeur
{ debut = NULL ;
courant = debut ; // par sécurité
}
~liste () ; // destructeur
void ajoute (void *) ; // ajoute un élément en début de liste
void * premier () // positionne sur premier élément
{ courant = debut ;
if (courant != NULL) return (courant->contenu) ;
else return NULL ;
}
void * prochain () // positionne sur prochain élément
{ if (courant != NULL)
{ courant = courant->suivant ;
if (courant != NULL) return (courant->contenu) ;
}
return NULL ;
}
int fini () { return (courant == NULL) ; }
} ;
liste::~liste ()
{ element * suiv ;
courant = debut ;
while (courant != NULL )
{ suiv = courant->suivant ; delete courant ; courant = suiv ; }
}
void liste::ajoute (void * chose)
{ element * adel = new element ;
adel->suivant = debut ;
adel->contenu = chose ;
debut = adel ;
}
2. Comme nous le demande l’énoncé, nous allons donc créer une classe liste_points
par :
class liste_points : public liste, public point
Notez que cet héritage, apparemment naturel, conduit néanmoins à introduire, dans la
classe liste_points, deux membres donnée (x et y) n’ayant aucun intérêt par la suite.
En revanche, la création des fonctions membre demandées devient extrêmement
simple. En effet, la fonction d’insertion d’un point en début de liste peut être la
fonction ajoute de la classe liste : nous n’aurons donc même pas besoin de la
surdéfinir. En ce qui concerne la fonction d’affichage de tous les points de la liste
(que nous nommerons également affiche), il lui suffira de faire appel :
– aux fonctions premier, prochain et fini de la classe liste pour le parcours de la liste
de pointsþ;
– à la fonction affiche de la classe point pour l’affichage d’un point.
271
