Russian Qt Forum

Qt => Общие вопросы => Тема начата: Maz от Июнь 01, 2007, 11:36



Название: Помогите с наследованием.
Отправлено: Maz от Июнь 01, 2007, 11:36
Есть базовый класс - диалог отнаследованный от QDialog. В базовом классе есть виртуальная функция open(). В конструкторе базового класса вызывается эта виртуальная функция.
Есть дочерний класс - наследник базового класса. В дочернем классе тоже есть виртуальная функция open().
Собственно проблема: при создании дочернего класса не вызывается функция open() (хотя ее вызов прописан в базовом классе).


Название: Помогите с наследованием.
Отправлено: WW от Июнь 01, 2007, 12:47
приведи код конструктора


Название: Помогите с наследованием.
Отправлено: Alex Forth от Июнь 01, 2007, 13:20
ГЫ!
Сам когда-то на таком спалился. В результате выяснил, что во время работы конструктора базового класса, экземплер имеет vtbl базового класса. Перед вызовом конструкотора производного класса генерится vtbl для производного класса. Отсюда мораль: из конструктора базового класса нельзся вызвать метод производного класса.


Название: Помогите с наследованием.
Отправлено: kitov от Июнь 02, 2007, 21:55
Абсолютно верно , Скотт Мейерс такого же мнения ;-)


Название: Помогите с наследованием.
Отправлено: Вячеслав от Июнь 02, 2007, 22:29
Во время работы конструктора объекта еще нет :( соотвественно - существуют только предки .... А жаль :( Временами приходиться дико извращаться .....


Название: Помогите с наследованием.
Отправлено: Вудруф от Июнь 04, 2007, 07:41
Ого, не знал. Век живи - век учись.