| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Конструктор потомка |
| Автор: Snowy 23.1.2006, 14:58 | ||||||
Вот такая головоломка меня преследует:
Итого, в результате примера данного кода получаем следующее. Смотрим последнюю часть - действие. 1. Вызывается функция, которая создает нам объект. Сообщаем ей, что хотим потомка. 2. Функция вызывает конструктор. Но! Вызывается конструктор не потомка, а предка!!!!! Конструктор потомка вообще не вызывается!!! Трейсил все по F7. В конструктор потомка не идет! 3. Отработал конструктор предка. Проверяем, что же мы создали. Как видим, функция в потомке отличается от функции в предке. Вызываем ее. Вызывается функция потомка. ClassName - тоже = 'TMyClass'. То есть, у нас определенно создался потомок, несмотря на то, что его конструктор не отработал. Но! Т.к. конструктор не отработал, то в MyName находится данные родителя. Это всего лишь пример. А в реале мне нужно в потомке создавать объекты в конструкторе. Объекты не создаются, а в функционале потомка идет к ним обращения. Вот и мучаюсь. Выход вроде простой - создать функции Init и Done. Но с объектной точки зрения это бред, т.к. для этого и преднозначен конструктор. Да и вообще интересно, почему именно так? Почему создается потомок, все функции потомка, а конструктор предка? Добавлено @ 15:07 Замечено, что если:
Но мне пока не известно, какого именно потомка я буду создавать. Для этого и передаю класс потомка, как параметр. Все отлично, все отрабатывает корректно, кроме конструктора. Why? |
| Автор: Bose 23.1.2006, 15:13 | ||
а может так?
|
| Автор: Snowy 23.1.2006, 15:16 |
| Нет, override только для виртуальных методов. А конструктор статичный. Добавлено @ 15:19 Во как. Сделал конструктор виртуальным, а у потомка сделал override. Заработало!!! Хм. Нужно будет подумать... Спасибо, с меня жирный + |
| Автор: Bose 23.1.2006, 15:44 |
| сам когда-то столкнулся с подобным как вариант еще можно попробовать обьявить конструктор с overload. кажется должно сработать. насколько такое обьявление корректно - того не знаю не ведаю |
| Автор: Snowy 23.1.2006, 15:57 |
| Нет, оверлоад тут совсем не к месту. Он нужен при наличии нескольких конструкторов. А у меня один. А вот виртуальный конструктор - самое то. |
| Автор: Bose 23.1.2006, 16:00 |
| ну да.... у меня в общем-то и было несколько конструкторов. Но дело в том, что оверлоад также позволяет вызвать конструктор потомка для статично обьявленного конструктора предка. (если я ничего не путаю). |
| Автор: Bose 23.1.2006, 16:28 |
| значит путаю |