Der Indexoperator

Mit Hilfe des Index-Operators (operator []) kann man eine Klasseninstanz dazu bringen, sich wie ein Array zu verhalten. Der Operator klassenintern hat lediglich den Index als Element , bzw. Klasseninstanz und Index, wenn er global definiert wird.

Definieren wir einen für unsere Beispielklasse 'Fraction' nun einen Index-Operator, deruns Zugriff auf Zaehler und Nenner gibt:

int & Fraction::Fraction operator[] ( int index )
{
  if( index < 1 ) return Numerator;
  else            return Denominator;
}

Was geschieht hier?

Zunächst wird der Index ausgewertet und entsprechend dazu eine Referenz auf einen Wert zurückgegeben. Wird der Wert 0 oder ein Wert kleiner 0 angegeben, wird die Referenz auf den Zähler zurückgegeben, bei einem Wert größer 1 wird die Referenz auf den Nenner geliefert. Nun lässt sich der Buch per Index-Operator auslesen:

Fraction f( 3, 4 );
 
printf( "Zähler: %d - Nenner: %d\n", f[0], f[1] );

Dies würde auch funktionierten, wenn wir direkt den Wert als Integer statt als Referenz zurückgebenwürden. Mit Hilfe der Referenz können wir allerdings auch schreiben:

Fraction f( 3, 4 );
 
f[0] = 47;
f[1] = 11;

Geben wir lediglich ein Integer, anstelle einer Referenz zurück, würden wir auf eine temporäre Instanz schreiben. Dies sollte jeder moderne Compiler heutzutage bemängeln. Soll der Zugriff nur Lesend erfolgen, so empfielt es sich eine Referenz auf ein Const-Objekt.