Динамическое распределение классов с проблемой наследования - PullRequest
0 голосов
/ 17 ноября 2010

Я пытаюсь динамически выделить массив базовых (ученических) классов, а затем назначить указатели на производные (математические) классы для каждого слота массива. Я могу заставить его работать, создав единый указатель на базовый класс, а затем назначив его производному классу, но когда я пытаюсь присвоить указатель динамически распределенному массиву базовых классов, он не работает. Я разместил фрагменты кода, который я использую ниже. Итак, в основном мой вопрос: почему динамически распределенный не работает?

   Student* studentList = new Student[numStudents];  
   Math* temp = new Math(name, l, c, q, t1, t2, f);  
   studentList[0] = temp;                                 

/*Fragment Above Gives Error:

main.cpp: In function âint main()â:
main.cpp:55: error: no match for âoperator=â in â* studentList = tempâ
grades.h:13: note: candidates are: Student& Student::operator=(const Student&)*/



   Student * testptr;
   Math * temp = new Math(name, l, c, q, t1, t2, f);
   testptr = temp
   //Works

1 Ответ

1 голос
/ 17 ноября 2010

studentList[0] - это не указатель (т.е. Student *), это объект (то есть Student).

Звучит так, как будто вам нужен массив указателей.В этом случае вы должны сделать что-то вроде:

Student **studentList = new Student *[numStudents];
Math *temp = new Math(name, l, c, q, t1, t2, f);
studentList[0] = temp;

В этом фрагменте тип studentList равен Student **.Поэтому типом studentList[0] является Student *.

(Обратите внимание, что в C ++ существуют более эффективные и безопасные способы сделать это, включая классы контейнеров и интеллектуальные указатели. Однако это выходит за рамкивопрос.)

...