Как изменить элемент массива через оператор "квадратная скобка". - страница 3

 
Georgiy Merts:

Всех приветствую. 

Такой вопрос.

Оператор "квадратная скобка" возможен для получения значения массива. Вот так:

А как надо объявить этот оператор (и можно ли), чтобы устанавливать значения внутри класса?

Что-то я так никогда не делал, использовал функции типа Set(iIdx,dValue), а вот как тоже самое сделать с помощью оператора? 

вы можете перегрузить оператор "квадратная скобка" в вашем классе, чтобы устанавливать значения внутри класса. Для этого нужно использовать две разные версии оператора "квадратная скобка": одну для получения значения, и другую - для установки значения.

Вот как выглядит пример класса, который позволяет получать и устанавливать значения массива с помощью оператора "квадратная скобка":


class MyClass {

public:

    int& operator[](int iIdx) {

        return arr[iIdx];

    }


private:

    int arr[10];

};


int main() {

    MyClass myArray;


    // Получить значение элемента массива:

    int val = myArray[0];

    // Установить значение элемента массива:

    myArray[0] = 234;

    myArray[1] = 345;

    myArray[2] = 123;


    return 0;

}


В этом примере мы определяем оператор "квадратная скобка" с возвращаемым значением ссылки на int (int&), чтобы мы могли изменять значения массива внутри класса. В функции main() мы создаем экземпляр класса MyClass и используем оператор "квадратная скобка", чтобы получить и установить значения элементов массива.

Обратите внимание, что оператор "квадратная скобка" возвращает ссылку на int, поэтому мы можем использовать его как lvalue, чтобы изменять значения внутри массива.

 
Ivan Sergeev #:

вы можете перегрузить оператор "квадратная скобка" в вашем классе, чтобы устанавливать значения внутри класса. Для этого нужно использовать две разные версии оператора "квадратная скобка": одну для получения значения, и другую - для установки значения.

Вот как выглядит пример класса, который позволяет получать и устанавливать значения массива с помощью оператора "квадратная скобка":

Интересный вариант. 

На первый взгляд, даже, пожалуй, лучше, чем предыдущий. Спасибо, сейчас не могу оценить, вечером приду, попробую.

 
Georgiy Merts #:

Интересный вариант. 

На первый взгляд, даже, пожалуй, лучше, чем предыдущий. Спасибо, сейчас не могу оценить, вечером приду, попробую.

Та не за что), пользуйтесь

Как попробуете, оцените, отпишитесь пожалуйста по результату. Буду признателен

 
Ivan Sergeev #:

Та не за что), пользуйтесь

Как попробуете, оцените, отпишитесь пожалуйста по результату. Буду признателен

В эмкуле нет возврата ссылок. Поэтому только помечтать.

 

Попробовал. Увы. Ошибка:

'&' - reference cannot used

Так что пока что вариант fxsaber'a - единственно правильный (хотя и довольно извратный)