Здавалка
Главная | Обратная связь

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



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

Итак, вполне логично предположить, что выражение 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

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

Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая

Заключительная глава...

...для тех, кто уходит на специализацию, отличную от программирования. Все дело в том, что со следующего урока произойдет распределение по специализациям. И, те, студенты, которые выбрали дизайн и администрирование прощаются с нами. В связи с этим, сегодня вы имеете уникальную возможность подтянуть все свои "хвосты". А, именно, сдать экзамен по С, задания на который, получили в девятнадцатом уроке. А, также зачет по основам С++, подтверждением которого является наличие всех выполненных домашних заданий по данному курсу.

Кроме того, в данном уроке вы найдете тест по всем изученным темам курса С++ и домашнее задание для тех, кто остается с нами.

ЖЕЛАЕМ УДАЧИ!!!

Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая

Домашнее задание

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: [ ], =, +, -,++ (добавление элемента в конец массива), -- (удаление элемента из конца массива).

Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.