![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
DeXPeriX |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 5.9.2008 Где: http://dexperix.n et Репутация: нет Всего: нет |
Имеется класс "балка". К балке могут быть применены различные нагрузки. Например, классы "Сила" и "Крутящий момент" наследуются от класса "Нагрузка". У каждого из классов "Сила" и "Крутящий момент" свой метод прорисовки.
Хочется сделать что-то типа: for(i=0; i<кол-во_нагрузок; i++) нагрузка[i]->draw(); Естественно, в зависимости от типа нагрузки иногда нужно обращаться и к специфичным полям именно этого типа нагрузки. "Сила" и "Крутящий момент" легко приводятся к типу "Нагрузка" и пихаются в массив. А вот как их взять обратно? Если нельзя - то как лучше решить мою задачу? |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
сделать метод draw виртуальным и перопределить его в наследниках.
|
|||
|
||||
DeXPeriX |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 5.9.2008 Где: http://dexperix.n et Репутация: нет Всего: нет |
Они и есть 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:09 |
|||
|
||||
DeXPeriX |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 5.9.2008 Где: http://dexperix.n et Репутация: нет Всего: нет |
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 |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
возможно. но зачастую есть более удачные решения.. Добавлено через 1 минуту и 18 секунд вот набросал в другой теме примерчик.. может и Вам подойдет : http://forum.vingrad.ru/index.php?showtopi...t&p=1691597 |
|||
|
||||
DeXPeriX |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 5.9.2008 Где: http://dexperix.n et Репутация: нет Всего: нет |
Вот тут и спрашиваю: какое решение может быть более удачным ?
![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Visitor приведенный в примере по ссылке в предыдущем посте. Это сообщение отредактировал(а) mes - 7.11.2008, 15:04 |
|||
|
||||
DeXPeriX |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 5.9.2008 Где: http://dexperix.n et Репутация: нет Всего: нет |
Great thanks!
Забыл метод виртуальным сделать ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
![]() Это сообщение отредактировал(а) mes - 7.11.2008, 16:01 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |