De façon plus originale, on peut aussi retourner une référence, ainsi l'appel de fonction peut se trouver en membre gauche d'une affectation...:
class tableau{ #define TAILLE_DEF 16 public: int & operator[](int i){ assert(i<taille); return t[i]; } tableau(int i=TAILLE_DEF){ t=new int[taille=i]; } //... private: int *t; int taille; }; main(){ tableau t; t[4]=9; //t[4] l-value cout<< "t[4]="<<t[4]<<endl;//t[4] r-value }Mais dans cet exemple, on ne pourra appeler l'opérateur
int & operator[](int i)
avec une constante de type
tableau, pour résoudre ce problème on peut ``surcharger'' cet
opérateur pour les constantes :
class tableau{ #define TAILLE_DEF 16 public: int & operator[](int i){ assert(i<taille); return t[i]; } int operator[](int i) const{ assert(i<taille); return t[i]; } // ... }
Il faut bien sûr faire attention à ne pas retourner une
référence d'un objet local...