![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| sergey_85 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
Привет!
У меня следующая проблема есть базовый класс BmsCWidget от него наследуются другие классы, например BmsCDocumentTableWidget так в коде я получаю список указателей, мне нужно проверить наследован ли класс от базового BmsCWidget, а потом сделать вызов виртуальной функции, но вызвать функцию не класса BmsCWidget, а того, к которому он принадлежит!!!! Я не знаю заранне имя класса!!! по коду this->setupControl(...) идет вызов ф-ции класса BmsCWidget , хотя реально объект BmsCDocumentTableWidget и у него setupControl(...) переопределена по своему и мне нужен вызов именно этой ф-ции!!! Есть ли какое решение я думал будет вызвана нужная ф-ция!!! Кстати юзаю Qt4 Эти ф-ции - общий интерфейс для всех классов:
Это сообщение отредактировал(а) sergey_85 - 18.2.2010, 22:24 -------------------- A good design always pays off. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
задача не понятна.. Если у Вас есть родитель, то при вызове его виртуальной функции, вызовется переопределенная функция дочернего класса, независимо от того знаете Вы его реальное имя или нет..
|
|||
|
||||
| sergey_85 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
ага вот где причина
а потом
Добавлено @ 23:23 думаю сделать виртульную ф-цию с этими строками кода и вызывать её в ctor'е
должно помочь, попробую! Это сообщение отредактировал(а) sergey_85 - 18.2.2010, 23:24 -------------------- A good design always pays off. |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
как то Вы загадками говорите, при чем тут BmsCDocumentTableWidget ? или Вы полагаете, что все форумчане прекрано осведомлены о том, что творится в Ваших мыслях ? Добавлено через 13 секунд у Вас вызов виртуальной функции класса из конструктора ? тогда работать не будет. |
|||
|
||||
| sergey_85 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
нет, дело в том, что this в данном случае имеет тип BmsCWidget, а не BmsCDocumentTableWidget, поэтому и вызывается базовая ф-ция, а не та которая переопределена!
Базовая это в BmsCWidget а переопределенная это в BmsCDocumentTableWidget Добавлено через 5 минут и 12 секунд да у меня вызов виртуальной ф-ции в конструкторе класса! получается, что эти пару строк кода мне размещать в конструкторах дочерних классов?
Это сообщение отредактировал(а) sergey_85 - 18.2.2010, 23:30 -------------------- A good design always pays off. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
sergey_85, вам же сказал mes, что виртуальные функции в конструкторах не вызывают. до окончания работы конструктора объект не является созданным, не существует. и полиморфизм (виртуальные функции) не работает (точнее - работает не так, как можно ожидать).
в конструкторе виртуальные функции и не нужны, т.к. всегда известен точный тип объекта - тот, конструктор которого работает. если объясните, чего вы добиваетесь, то получите более конструктивный ответ |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |