class chaine{ int lg; char *buf; //... public: //... char &operator[](int i); char operator[](int i)const; }; char &chaine::operator[](int i){ assert ( i < lg ); return(buf[i]); } char chaine::operator[](int i)const{ assert ( i < lg ); return(buf[i]); } //... void f(){ chaine ch1; const chaine ch2="abcdef" ch1[1]=ch2[1]; //... }
Remarquons l'utilité des deux surcharges pour []
, l'une d'entre
elle retourne une référence sur un élément du ``tableau'', elle peut
donc se trouver en membre gauche d'une affectation, mais par contre
cette surcharge ne pourra être utilisé pour un objet constant d'où la
nécessité de la deuxième.
L'opérateur []
ne peut être statique mais peut s'hériter.