![]() |
Модераторы: 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 |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |