класс — оператор 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;
}

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

0

Решение

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

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

По вопросам рекламы [email protected]