Il suffit décrire :
class liste { element *tab, *courant; int nombre; public : // ... autres méthodes ... friend element operator [](liste& l, int i); }; element operator[](liste& l, int i = 0);// donne le i-ième élément de la liste après courant{ if (!courant) return 0; element *anccourant = l.courant; l.avance(i); element e = courant->contenu; courant = anccourant; return e;}
Si lon navait pas pu accéder à la déclaration des classes, il aurait fallu utiliser la méthode valeur
devenue indispensable pour accéder au contenu de la liste :
element operator[](liste& l, int i = 0);// donne le i-ième élément de la liste après courant{ l.avance(i); element e = l.valeur(); l.recule(i); return e;}
Cet opérateur est correct avec les deux versions de la liste, puisque celles-ci ont le même comportement extérieur, comme on la indiqué au chapitre 6.