Перегружаемые оператор присваивания и индексированные операторы

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&?

Ответы:

Произойдет ошибка при компиляции. Использование ссылки в качестве возвращаемого значения позволяет использовать операцию индексирования как с правой, так и слевой стороны от операции присваивания.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: