Операція індексації, яка звичайно використовується для доступу до елементів масиву, може бути перезавантажена. Це корисно в тому випадку, коли ми хочемо змінити спосіб роботи С++ з масивами. Наприклад, нам може знадобитися «безпечний масив», в якому закладена автоматична перевірка використовуваного для доступу до масиву індексу елемента. Вона буде перевіряти, чи не вийшли ми за межі масиву.
Реалізувати перезавантаження операції можна різними способами. Далі представлені три:
§ з використанням двох окремих методів put() і get() (програма 10.10)
§ з використанням методу access(), що використовує повернення за посиланням (програма 10.11)
§ перезавантажена операція [], що використовує повернення за посиланням (програма 10.12).
#include <iostream.h>
#include <conio.h>
#include <bios.h>
#include <process.h>
const int LIMIT=100;
class safearray
{private:
int arr[LIMIT];
public:
void putel(int n,int elvalue)
{if (n<0 || n>=LIMIT)
{cout<<”\nПомилковий індекс!”;exit(1);}
arr[n]=elvalue;
}
int getel(int n) const
{if(n<0|| n>=LIMIT)
{cout<<”\nПомилковий індекс!”;exit(1);}
return arr[n];
}
};
////////////////
int main()
{
clrscr();
safearray sal;
//elementy
for (int j=0;j<LIMIT;j++)
sal.putel(j,j*10);
//показати
for (j=0;j<LIMIT;j++)
{int temp=sal.getel(j);
cout<<”Елемент “<<j<<”=”<<temp<<endl;
}
bioskey(0);
return 0;
}
Програма 10.10
#include <iostream.h>
#include <conio.h>
#include <bios.h>
#include <process.h>
const int LIMIT=10;
class safearray
{private:
int arr[LIMIT];
public:
int& access(int n)
{
if (n<0||n>=LIMIT)
{cout<<"\nПомилковий індекс:";exit(1);}
return arr[n];
}
};
////////////////
int main()
{
clrscr();
safearray sal;
//елементи
for (int j=0;j<LIMIT;j++)
sal.access(j)=j*10;
//показати
for (j=0;j<LIMIT;j++)
{int temp=sal.access(j);
cout<<"Елемент "<<j<<"="<<temp<<endl;
}
bioskey(0);
return 0;
}
Програма 10.11
У цій програмі рядок
sal.access(j)=j*10;
означає, що значення j*10 буде поміщене в елемент масиву arr[j], посилання на який повертається методом.
#include <iostream.h>
#include <conio.h>
#include <bios.h>
#include <process.h>
const int LIMIT=10;
class safearray
{private:
int arr[LIMIT];
public:
int& operator[](int n)
{
if (n<0||n>=LIMIT)
{cout<<"\nПомилковий індекс:";exit(1);}
return arr[n];
}
};
////////////////
int main()
{
clrscr();
safearray sal;
//elementy
for (int j=0;j<LIMIT;j++)
sal[j]=j*10;
//show
for (j=0;j<LIMIT;j++)
{int temp=sal[j];
cout<<"Елемент "<<j<<"="<<temp<<endl;
}
bioskey(0);
return 0;
}
Програма 10.12
В цій програмі ми можемо використовувати звичайний запис операції індексації масиву
sal[j]=j*10;
і
temp=sal[j]
для вводу-виводу елементів масиву.