Я, вероятно, будет путать себя во время написания этого, извините заранее:массив Random Access C++
Есть ли способ я могу получить доступ место в динамическом массиве (увеличиваем указатель массива) указателей с использованием sizeof()
объект, который находится в массиве?
Например: У меня есть динамический массив базового класса типа Student, заполненный объектами производного класса (Graduate, Depgraduate).
Из-за этого я не могу просто пройти через свой массив в нормальном режиме, чтобы отображать информацию, потому что фактические объекты Выпускники и бакалавриаты разных размеров, чем Student. Каждый шаг массива будет перемещаться sizeof(Student)
, когда фактические объекты больше.
В зависимости от типа студента я делаю (это для Graduate):
Student *student = new Graduate(undergrad, fName, lName, major, idNum, arr2, cSize,
degreeType, thesis);
arr[i] = student;
Где arr
был объявлен: Student *arr = new Student[size];
Используя мой массив я создал это в цикле:
if (!students[i].getGradStatus()){
handleGraduate(&students[i], i);
step = step + sizeof(Graduate);
}
else if (students[i].getGradStatus()){
handleUndergraduate(&students[i], i);
step = step + sizeof(Undergraduate);
}
Я пытался придумать способ изменить размер шага. Я не думаю, что это будет работать с циклом for, но цикл while может быть другим. В основном я пытаюсь найти что-то похожее на файл seekg()
, но вручную на массив.
И как я заметил, всем нравится подвергать сомнению использование динамических массивов над векторами, поэтому позвольте мне сказать, что я не могу использовать векторы в этом проекте (STL не допускается :(). И я должен использовать полиморфизм, таким образом почему у меня есть указатель на массив типа Student холдингового производных объекты класса.
И вот почему классы без листьев в полиморфной иерархии должны быть абстрактными. .. –
Повесьте, так что ваш массив содержит фактические объекты, а не указатели на них? Для вашего массива, заполняющего размер, здесь имеет смысл указатель, а не объект Student. Я что-то упускаю? –
Обычно это делается с помощью массива указателей ('Student ** arr'). Затем каждый элемент может указывать на другой класс в иерархии. То, что вы говорите, вы хотите сделать, возможно, но не для слабонервных. – 1201ProgramAlarm