Перегрузка оператора [ ]

299
29 января 2018, 06:33

Не совсем понимаю, как работает перегруженный оператор [] в следующем коде:

class safearray
    {
    private:
        int arr[LIMIT];
    public:
        int& operator[](int n)
        {
            if (n < 0 || n >= LIMIT)
            {
                cout << "\nОшибочный индекс!"; exit(1);
            }
            return arr[n];
        }
    };
int main()
{
    safearay sa1;
    for (int j = 0; j < LIMIT; j++)
        sa1[j] = j * 10;
    for (j = 0; j < LIMIT; j++)
    {
        int temp = sa1[j];
        cout << "Элемент " << j << " равен " << temp << endl;
    }
    return 0;
Answer 1

Во первых вы в main() обезопасили в цикле for выход за предела границ, так что там не будет никакой ошибки. А что касается оператора, то он выдает системе информацию для выхода из программы с помощью exit(1), если условие выполняется, а если нет, т. е. n находится в правильном диапазоне, возвращается данный элемент массива arr[n]. А вместо cout элегантнее использовать cerr для сообшения об ошибках, поскольку после такого вывода у вас других выводов не будет

Answer 2
class safearray // класс такой класс
    { // открывающая скобка. фигурная.
    private: // атрибут доступа
        int arr[LIMIT]; // массив целых знаковых размером LIMIT
    public: // атрибут доступа
        int& operator[](int n) // перегрузка оператора
        { // открывающая скобка. фигурная.
            if (n < 0 || n >= LIMIT) // если n меньше нуля; 
                                     //или больше или равно LIMIT - вывести сообщение об ошибке и 
                                     // завершить программу (руки бы оторвать за такое)
            {
                cout << "\nОшибочный индекс!"; exit(1);
            }
            // вернуть число по индексу n
            return arr[n];
        }
    };
int main() // ещё вопросы?
{
    safearay sa1;
    for (int j = 0; j < LIMIT; j++)
        sa1[j] = j * 10;
    for (j = 0; j < LIMIT; j++)
    {
        int temp = sa1[j];
        cout << "Элемент " << j << " равен " << temp << endl;
    }
    return 0;
}
READ ALSO
Максимальный размер массива C++

Максимальный размер массива C++

Linux x86 компилятор g++Не получается создать массив с кол-вом int элементов, пробовал даже int заменять на double все ровно пишет size of array is too large, как...

335
Окно появляется и сразу исчезает

Окно появляется и сразу исчезает

Я хочу вывести График, после нажатой кнопкиНо у меня окошко появляется и сразу исчезает

209