Оператор C++ Subscript

Я написал код, но он не работает. Каждый раз, когда я запускаю программу, я получаю эту ошибку

Ошибка проверки времени выполнения № 2 - стек вокруг переменной 'ary' поврежден

в любом случае вот мой код (это маленький код)

#include <iostream>
using namespace std;

class Arrayz{
private:
    int arry[5];
public:
    Arrayz(){}
    void setInf(){
        for(int i = 0; i < 5; ++i){
            cout << "Enter age of your friends: ";
            cin >> arry[5];
        } 
    }
    const int& operator [](const int pos){
        return arry[pos];
    }
};

int main(){
    Arrayz ary;
    ary.setInf();
    cout << "Here are your friend's age: " << endl;
    for (int i = 0; i < 5; ++i){
        cout << ary[i] << endl;
    }


    return 0;
}

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

2 ответа

Вы, наверное, имеете в виду cin >> arry[i]; - iне 5,

Вы сделали опечатку в функции-член setInf. Вместо cin >> arry[5]; там должно быть cin >> arry[i];

void setInf(){
    for(int i = 0; i < 5; ++i){
        cout << "Enter age of your friends: ";
        cin >> arry[i];
    } 
}

Что касается оператора индекса, то вы его правильно определили

const int& operator [](const int pos){
    return arry[pos];
}

хотя нет необходимости объявлять параметр с квалификатором const. Также сам оператор должен иметь квалификатор const. Вы можете написать просто

const int& operator [](int pos) const {
    return arry[pos];
}

Или же

int operator [](int pos) const {
    return arry[pos];
}

Также вы можете определить его неконстантную версию, когда пользователь может изменить элементы массива arry.

int & operator []( int pos) {
    return arry[pos];
}

Также неплохо, чтобы у вашего класса была функция-член, которая бы возвращала размер массива. Например

class Arrayz{
private:
    static const size_t N = 5;
    int arry[N];
public:
    Arrayz(){}
    void setInf(){
        for(int i = 0; i < N; ++i){
            cout << "Enter age of your friends: ";
            cin >> arry[i];
        } 
    }
    int operator [](int pos) const {
        return arry[pos];
    }

    int & operator []( int pos) {
        return arry[pos];
    }

    size_t size() const { return N; }
};

И в основном вы могли бы написать

for (int i = 0; i < ary.size(); ++i){
    cout << ary[i] << endl;
}
Другие вопросы по тегам