Indice
L'opérateur souscrit ([]), comme l'opérateur d'appel de fonction, est considéré comme un opérateur binaire.L'opérateur souscrit doit être une fonction membre non statique qui prend un argument unique.Cet argument peut être de tout type et indique l'indice de table voulue.
Exemple
L'exemple suivant montre comment créer un vecteur du type int qui implémente la vérification des limites :
// subscripting.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class IntVector {
public:
IntVector( int cElements );
~IntVector() { delete [] _iElements; }
int& operator[]( int nSubscript );
private:
int *_iElements;
int _iUpperBound;
};
// Construct an IntVector.
IntVector::IntVector( int cElements ) {
_iElements = new int[cElements];
_iUpperBound = cElements;
}
// Subscript operator for IntVector.
int& IntVector::operator[]( int nSubscript ) {
static int iErr = -1;
if( nSubscript >= 0 && nSubscript < _iUpperBound )
return _iElements[nSubscript];
else {
clog << "Array bounds violation." << endl;
return iErr;
}
}
// Test the IntVector class.
int main() {
IntVector v( 10 );
int i;
for( i = 0; i <= 10; ++i )
v[i] = i;
v[3] = v[9];
for ( i = 0; i <= 10; ++i )
cout << "Element: [" << i << "] = " << v[i] << endl;
}
Commentaires
Lorsque i atteint 10 dans le programme précédent, operator[] détecte qu'un indice interdit est utilisé et envoie un message d'erreur.
Notez que la fonction operator[] retourne un type référence.Cela le entraîne une l-value, vous permettant d'utiliser des expressions indicées de chaque côté les opérateurs d'assignation.