Главная » Статьи » Програмування » C++ [ Добавить статью ]

RUS Уроки по программированию на языке С++ (Перегрузка оператора индексирования.)

Перегрузка оператора индексирования.

Только что мы с вами разобрали особенности перегрузки инкремента и декремента. Теперь поближе познакомимся с еще одним "особенным" оператором - оператором индексирования ([] - квадратные скобки).

Итак, вполне логично предположить, что выражение A [ i ], где A - объект абстрактного типа class, представляется компилятором как A.operator [ ] ( i ). Рассмотрим пример:

# include <iostream>
using namespace std;
class A{ 
 
 // массив из 10 элементов
 // типа int
 int a[10];

 // размер массива
 int size;

public:
 
 
 // конструктор без параметров
 A(){
 size=10;
 for (int i = 0; i < 10; i++)
 
 // очевидно, что операция [], использованная здесь, 
 // в конструкторе класса А, является стандартной,
 // так как она выполняется над именем массива типа int.
 
 a [i] = i + 1;

 } 

 // перегрузка оператора 
 // индексирования
 // возврат по ссылке осуществлен
 // для ситуации ОБЪЕКТ[i]=ЗНАЧЕНИЕ
 // на место вызова индексирования
 // вернется сам объект
 int&operator[](int j){ 
 
 // возврат конкретного объекта
 return a [j];
 } 
 
 // функция которая возвращает
 // размер массива 
 int Get () const {
 return size;
 }

}; 

void main () {
 
 int i,j;

 // Работа с одним объектом типа А
 A object;

 cout<<"\nOne object:\n";

 for(i=0;i<object.Get();i++){

 // выражение array[i] интерпретируется как
 // object.operator [](j).
 cout<<object[i]<<" "; 
 } 
 
 cout<<"\n\n";

 // Работа с массивом объектов типа А
 A array [3];

 cout<<"\nArray of objects:\n";
 
 for(i=0;i<3;i++){

 for(j=0;j<object.Get();j++){

 // выражение array[i][j] интерпретируется как
 // (array [i]).operator [](j).
 // Первая из двух операций [] является стандартной, 
 // так как выполняется над именем массива. 
 // При этом неважно, какой тип имеют его элементы. 
 // Вторая операция [] - переопределенная,
 // так как результатом первой операции [] является объект типа А. 

 cout << array [i][j] << " ";

 }
 cout <<"\n\n";
 } 

} 

___________________________________

Результат работы программы:

One object:
1 2 3 4 5 6 7 8 9 10


Array of objects:
1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10

Примечание: Обратите внимание!!! В данном примере мы не перегружаем двойные квадратные скобки для двумерного массива. Мы просто создаем массив объектов класса, в котором перегружен оператор []. 

Категория: C++ | Добавил: DEN-SHP (06.11.2012)
Просмотров: 3316 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]