On créera deux classes : Liste et ElementListe. Une Liste contient un pointeur vers son premier élément. Un ElementListe a la forme :
class ElementListe { private: int valeur; ElementListe *next; ElementListe(int val); ~ElementListe(); int getValeur(); void setValeur(int v); ElementListe * getSuivant(); void setSuivant(ElementListe *n); // La déclaration suivante autorise // la classe Liste à accéder aux éléments privés // de ElementListe friend Liste; };
friend ostream & operator<<(ostream &s, const Liste &l);On dit que l'opérateur <<, quand il prend comme argument une sortie et une liste, a accès à la représentation interne de Liste.
Il ne vous reste plus qu'à implémenter l'opérateur pour qu'il écrive les éléments de Liste&nobr;:
ostream & operator<<(ostream &s, const Liste &l) { // Affiche le contenu de la liste .... // Retourne le flux de sortie (pour composition cout << a << b...) return s; }
class ElementListe { private: int valeur; Liste *suite; ElementListe(int val); ~ElementListe(); int getValeur(); void setValeur(int v); Liste * getSuite(); void setSuite(Liste *n); // La déclaration suivante autorise // la classe Liste à accéder aux éléments privés // de ElementListe friend Liste; };Attention : Dans ce dernier cas, un ElementListe seul a pour suite une liste vide, et non un pointeur nul.