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.