Перегрузка [] в динамическом классе c++

231
19 декабря 2017, 18:43
class Dynarr
{
private:
   double * arr;
   int size;
public:
    double & operator[](int pos) {
       cout << " hey " <<  size << endl;
       return arr[pos];
    };
    Dynarr * operator=(Dynarr * rhs) {
       *this = Dynarr(rhs->size, rhs->arr);
    };
};
int main()
{
    double * darr = new double[5];
    darr[0] = 0;
    darr[1] = 1;
    darr[2] = 2;
    darr[3] = 3;
    darr[4] = 4;
    Dynarr * arrr1 = new Dynarr(5, darr);
cout << arrr1[1] << endl;
system("pause");
return 0;
}

Как в строке

cout << arrr1[1] << endl; 

обратиться ко второму элементу массива arr?

Answer 1

Вариантов, собственно, два: как вам уже написали,

(*arr1)[1]

и

arr1->operator[](1)

Но я бы еще хотел заметить, что стоит иметь два перегруженных оператора - один для константного объекта:

double & operator[](int pos) 
{
   cout << " hey " <<  size << endl;
   return arr[pos];
};
double operator[](int pos) const
{
   cout << " hey " <<  size << endl;
   return arr[pos];
};

Ну и - неплохо бы проверять, не выходит ли pos за границы массива.

READ ALSO
Ввод строки с пробелами C++

Ввод строки с пробелами C++

В общем есть функция, в которой идет ввод string-строки через std::getline(); Вызывая эту функцию несколько раз подряд, первая строка записывается пустой,...

305
How to use libsodium library for c++? [требует правки]

How to use libsodium library for c++? [требует правки]

Download libsodium from https://githubcom/jedisct1/libsodium but can't connect to my project

179
Form1(void){&hellip;} Что это?

Form1(void){…} Что это?

Что это? Это функция, или переменная? Это что? В файле проекта Form1h

278
Загрузка формата .obj в DirectX9

Загрузка формата .obj в DirectX9

Помогите загрузить Wireframe Object(*obj) в DirectX

217