class vect {
private:
int *p;
int size;
public:
vect(void); // создает массив из 10 элементов
vect(int mysize); // создает массив из mysize элеметов
vect(int *a,int n); // инициализируется массивом
vect(const vect &v); // инициализируется vect
~vect() { delete p; }
int & operator[](int i);
vect& operator=(const vect &v); // перегруженное присваивание
vect operator+(const vect &v); // перегруженное сложение
};
vect::vect(int n) { // преобразует обычный массив
p=new int[n]; size=n;
for(int index=0; index < size; index++) p[i]=index;
}
vect::vect(int *a,int n) { // преобразует обычный массив
p=new int[n];
size=n;
for(int index=0; index < size; index++) p[i]=a[i];
}
vect::vect(const vect &v) { // конструктор копии
p=new int[v.size]; size=v.size;
for(int index=0; index < size; index++) p[i]=v.p[i];
}
Перегруженный оператор индексации берет целый аргумент и проверяет, находится ли значение в пределах диапазона. Если да, он использует это значение для того, чтобы возвратить адрес индексированного элемента.
int &vect::operator[](int i) {
if(i < 0 || i > =size) { cerr << “”;}
return p[i];
}
Перегруженный оператор индексации имеет возвращаемый тип и один параметр. Он должен быть нестатической функцией-членом.
Вопросы:
1. Что если перегруженная операция [] будет иметь тип возвращаемого значения int, а не int&?
Ответы:
Произойдет ошибка при компиляции. Использование ссылки в качестве возвращаемого значения позволяет использовать операцию индексирования как с правой, так и слевой стороны от операции присваивания.