| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > ООП проблемы с нужным классом |
| Автор: relate 19.2.2010, 11:21 | ||||
| Проблемма: есть динамический массив классов, в него внесены потомки базавого класса. При попытке создать экземпляр класса из массива вызывается конструктор базового класса, а не потомка, что внесен в массив ((( Code simple:
Можно сделать self.fConvertWay := THpFF_ConvertWay_CoordGMS.create; Но как поступить с функцией THpCustomfF_Data.convertWaySet4it ??? Мне удобно ее пользовать d_f.convertWaySet4it(d_f.convertWayAvailable[1]); А имя класса, что храниться в массиве брать, как class funtion NameStr: string; Да и список доступных способов преобразования fConvertWayAvailable каждый наследник THpCustomfF_Data создает свой... Помогите pls self.fConvertWayAvailable[0] := THpFF_ConvertWay_CoordGMS; self.fConvertWay := self.fConvertWayAvailable[0].Create; <= Как вызвать конструктор класса THpFF_ConvertWay_CoordGMS ? |
| Автор: CodeMonkey 19.2.2010, 14:07 |
| Так конструктор ведь не виртуальный. Сделайте виртуальным. |
| Автор: relate 19.2.2010, 18:12 | ||||
Хм, конструктор базового класса?
Не помогло Убрал virtual В потомке?
Спасибо за совет, но... Не помогло... вызывается конструктор THpCustomfF_ConvertWay... и все. Вопрос остается открытым help please |
| Автор: relate 19.2.2010, 18:35 |
| По сути virtual, если не изменяет память меняет расположение метода в VMT использование virtual оправданно если метод используется часто.... |
| Автор: relate 19.2.2010, 18:50 | ||||||
О! все это натолкнуло на мысль сделать метод Create в базовом классе абстрактным:
в классе потомке реализовываем его:
и в конструкторе небольшие изменения:
и о чудо! работает ))))))))))) Ура, заработало! |
| Автор: relate 19.2.2010, 19:24 | ||
| CodeMonkey Спасибо за направление поиска! Может вы, говоря
разбежались в терминогологии Thanks 4 you!!! Реутинг не повышается -у меня менее 100 постов |
| Автор: relate 19.2.2010, 21:43 | ||||
| Еще один вариант решения проблеммы. Подсказал Gelios -админ дру сайта:
|