Partager via


Mise en indice

L'opérateur d'indice ([ ]), comme l'opérateur d'appel de fonction, est considéré comme un opérateur binaire. L'opérateur d'indice doit être une fonction membre non statique qui accepte un seul argument. Cet argument peut être de tout type et désigne l'indice de tableau souhaité.

Exemple

L'exemple suivant montre comment créer un vecteur de 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 hors limite est utilisé et émet un message d'erreur.

Notez que la fonction operator[] retourne un type référence. Il s'agit par conséquent d'une l-value, ce qui vous permet d'utiliser des expressions indicées de chaque côté des opérateurs d'assignation.

Voir aussi

Référence

Surcharge d'opérateur