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];}