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)
|
Просмотров: 3383
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]