Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Наследование: перевод туда и обратно |
Автор: DeXPeriX 7.11.2008, 13:55 |
Имеется класс "балка". К балке могут быть применены различные нагрузки. Например, классы "Сила" и "Крутящий момент" наследуются от класса "Нагрузка". У каждого из классов "Сила" и "Крутящий момент" свой метод прорисовки. Хочется сделать что-то типа: for(i=0; i<кол-во_нагрузок; i++) нагрузка[i]->draw(); Естественно, в зависимости от типа нагрузки иногда нужно обращаться и к специфичным полям именно этого типа нагрузки. "Сила" и "Крутящий момент" легко приводятся к типу "Нагрузка" и пихаются в массив. А вот как их взять обратно? Если нельзя - то как лучше решить мою задачу? |
Автор: mes 7.11.2008, 14:06 |
сделать метод draw виртуальным и перопределить его в наследниках. |
Автор: DeXPeriX 7.11.2008, 14:06 |
Они и есть private ![]() Workload *tempObj; tempObj = new Force(); //curValue = static_cast<Force>(tempObj)->getValue(); curValue = tempObj->getValue(); error: ‘class Workload’ has no member named ‘getValue’ Метод draw у всех и так переопределён Добавлено через 12 минут и 2 секунды В общем, получается что задача сводится к приведению типа от родителя к ребёнку. Такое в С++ возможно? |
Автор: DeXPeriX 7.11.2008, 14:32 |
beams[curBeam]->tempObj = new Force(); //Force* tf = dynamic_cast<Force>(beams[curBeam]->tempObj); Force* tf = (Force) beams[curBeam]->tempObj; tmp = tf->getValue(); painter.cpp: In constructor ‘Painter::Painter()’: painter.cpp:23: error: no matching function for call to ‘Force::Force(Workload*&)’ force.h:21: note: candidates are: Force::Force() force.h:12: note: Force::Force(const Force&) |
Автор: mes 7.11.2008, 14:50 | ||
возможно. но зачастую есть более удачные решения.. Добавлено через 1 минуту и 18 секунд вот набросал в другой теме примерчик.. может и Вам подойдет : http://forum.vingrad.ru/index.php?showtopic=234230&view=findpost&p=1691597 |
Автор: DeXPeriX 7.11.2008, 14:52 |
Вот тут и спрашиваю: какое решение может быть более удачным ? ![]() |
Автор: mes 7.11.2008, 15:03 | ||
Visitor приведенный в примере по ссылке в предыдущем посте. |
Автор: DeXPeriX 7.11.2008, 15:24 |
Great thanks! Забыл метод виртуальным сделать ![]() |
Автор: mes 7.11.2008, 15:57 | ||
![]() |