Страницы

Поиск по вопросам

понедельник, 10 июня 2019 г.

Наследование, проблема с производным классом и динамич. массивом

Столкнулся с одной темой, которую никак не получается разобрать. Имеется следующий кусок кода с базовым классом Array и методом Input, в котором и кроется ошибка:
class Array { public: int *Mass, index; Array() { index = 0; }
virtual void summ(Array Data) {} virtual void foreach() {} void Input(); };
void Array::Input() { cout << "Массив : "; for (int i = 0; i < index; i++) { cin >> Mass[i]; } }
Также имеется производный класс:
class SortArray : public Array { public: SortArray() {} SortArray(int arrSize) { index = arrSize; int *Mass = new int[arrSize]; } void summ(Array Data); void foreach(); };
При попытке выполнить метод Input, для ввода чисел в массив производного класса возникает ошибка, поскольку память под динамический массив похоже была удалена, либо что - то другое. Где искать ошибку? Пробовал перекинуть сами методы, массив, изменять конструктор, но этот динамический массив так и выдает ошибку чтения. Как переработать код? Подскажите пожалуйста.
int arrSize; cout << "Введите размер первого массива: "; cin >> arrSize; SortArray Arr1(arrSize); Arr1.Input();


Ответ

Вот здесь
int *Mass = new int[arrSize];
вы выделили память, но указатель на нее сохранили не в поле класса, а в локальной переменной... И при выходе из конструктора, понятно, ее потеряли.
И еще - не оставляйте неинициализированных переменных. Например,
Array() { index = 0; }
чему после этого равен Mas? Мусору.
Впрочем, вообще вызывает недоумение - Array нигде ни разу не инициализирует Mas, но функция Input - именно в нем... Почему вы спроектировали иерархию именно так?

Комментариев нет:

Отправить комментарий