На основе последующего комментария ОП:
Пользователь DBUserObject (3).Он загружает элемент в свой конструктор.
Если вы имеете в виду конструктор DBObject
(а не конструктор DBUserObject
), то это ваша проблема.Виртуальные функции не работают внутри конструкторов.Конструкторы запускаются из наименее производного (наиболее базового) класса в наиболее производный (действительный тип).Когда запускается конструктор класса, объект относится только к типу этого класса и ничего более не наследуется.
Другими словами, когда вы создаете DBUserObject
, сначала запускается конструктор QObject
, а внутриэтот конструктор объект только QObect
и ничего более.Затем запускается конструктор DBObject
, и внутри этого конструктора объект представляет собой DBObject
и ничего более.Наконец, запускается конструктор DBUserObject
, и, наконец, объект является DBUserObject
.
Так что если вы вызываете load()
внутри конструктора DBObject
, объект в этой точке только DBObject
и так имеет только DBObject
версия загрузки.Это относится аналогично к любой виртуальной функции.
Если вы хотите получить эффект от вызова DBUserObject
версии load()
, вам нужно будет вызвать ее из конструктора DBUserObject
или извнекласс после того, как объект был построен.
Дополнительная информация: