Testując algorytm funkcji przeładowanego operatora, & możemy samodzielnie stwierdzić, iż powtórne wykorzystanie jednoargumentowego operatora adresowego & w celu pobrania adresów poszczególnych elementów zainicjowanej odpowiednimi wartościami tablicy tab z oczywistych względów okaże się czynnością niemożliwą do zrealizowania. Wynika to z faktu, iż tablica tab w istocie została zadeklarowana w funkcji main() jako pewien obiekt klasy array, w której uprzednio zdefiniowano już jednoargumentową funkcję operator &() przeładowanego operatora &.

Przeładowywanie operatora indeksowania tablic II

Operator indeksowania tablic [] podczas przedefiniowywania traktowany jest jako operator dwuargumentowy i z powodzeniem może być przeładowany za pomocą funkcji składowej klasy bez potrzeby posługiwania się funkcją zaprzyjaźnioną.

Ćwiczenie 3.9.

Jako praktyczny przykład wykorzystania funkcji operator[][() przeładowanego operatora [] rozpatrzmy prostą klasę array, w której zadeklarowano jednowymiarową tablicę tablica o pięciu elementach typu double.

Konstruktor array() przypisuje każdemu z jej elementów odpowiednią wartość początkową.

Wartością powrotną funkcji przeładowanego operatora [] jest wartość elementu tablicy o numerze (indeksie) jednoznacznie określonym poprzez argument funkcji:

Na listingu 3.6 pokazano praktyczny przykład zastosowania w programie omawianych funkcji.

Ćwiczenie 3.10.

Pokazaną w poprzednim ćwiczeniu funkcję przeładowanego operatora [] można zdefiniować również w ten sposób, aby operator [] mógł być używany zarówno po lewej, jak i po prawej stronie instrukcji przypisania. W tym celu wystarczy zastosować typ odwołaniowy wartości powrotnej funkcji operator[]():

