C++ оператор перегрузки массива

Я создаю кучу, вот так:

struct Heap{
    int H[100];
    int operator [] (int i){return H[i];}
    //...    
};

Когда я пытаюсь распечатать элементы из него, я делаю так:

Heap h;
//add some elements...
printf("%d\n", h[3]); //instead of h.H[3]

У меня вопрос, если вместо доступа я хочу установить их, вот так:

for(int i = 0; i < 10; i++) h[i] = i;

Как я могу сделать? Я не могу просто сделать так, как я сделал...

Спасибо!

3 ответа

Решение

Идиоматично предусмотреть пару перегрузок operator[] функция - одна для const объекты и один для неconst объекты. Тип возвращаемого значения const функция-член может быть const& или просто значение в зависимости от возвращаемого объекта, в то время как тип возвращаемого значенияconst функция-член обычно является ссылкой.

struct Heap{
    int H[100];
    int operator [] (int i) const {return H[i];}
    int& operator [] (int i) {return H[i];}
};

Это позволяет вам изменять неconst объект с помощью оператора массива.

Heap h1;
h1[0] = 10;

все еще позволяя вам получить доступ const объекты.

Heap const h2 = h1;
int val = h2[0];

Вы можете вернуть ссылки на то, что должно быть установлено. добавлять & к типу возврата.

int& operator [] (int i){return H[i];}

Вы должны вернуться по ссылке. В текущей версии вы берете копию и редактируете эту копию, которая не повлияет на исходный массив. Вы должны изменить перегрузку вашего оператора на это:

int& operator [] (int i){return H[i];}
Другие вопросы по тегам