![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Snowy |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Вот такая головоломка меня преследует:
Итого, в результате примера данного кода получаем следующее. Смотрим последнюю часть - действие. 1. Вызывается функция, которая создает нам объект. Сообщаем ей, что хотим потомка. 2. Функция вызывает конструктор. Но! Вызывается конструктор не потомка, а предка!!!!! Конструктор потомка вообще не вызывается!!! Трейсил все по F7. В конструктор потомка не идет! 3. Отработал конструктор предка. Проверяем, что же мы создали. Как видим, функция в потомке отличается от функции в предке. Вызываем ее. Вызывается функция потомка. ClassName - тоже = 'TMyClass'. То есть, у нас определенно создался потомок, несмотря на то, что его конструктор не отработал. Но! Т.к. конструктор не отработал, то в MyName находится данные родителя. Это всего лишь пример. А в реале мне нужно в потомке создавать объекты в конструкторе. Объекты не создаются, а в функционале потомка идет к ним обращения. Вот и мучаюсь. Выход вроде простой - создать функции Init и Done. Но с объектной точки зрения это бред, т.к. для этого и преднозначен конструктор. Да и вообще интересно, почему именно так? Почему создается потомок, все функции потомка, а конструктор предка? Добавлено @ 15:07 Замечено, что если:
Но мне пока не известно, какого именно потомка я буду создавать. Для этого и передаю класс потомка, как параметр. Все отлично, все отрабатывает корректно, кроме конструктора. Why? |
||||||
|
|||||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
а может так?
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет, override только для виртуальных методов. А конструктор статичный.
Добавлено @ 15:19 Во как. Сделал конструктор виртуальным, а у потомка сделал override. Заработало!!! Хм. Нужно будет подумать... Спасибо, с меня жирный + |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
сам когда-то столкнулся с подобным
как вариант еще можно попробовать обьявить конструктор с overload. кажется должно сработать. насколько такое обьявление корректно - того не знаю не ведаю |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нет, оверлоад тут совсем не к месту. Он нужен при наличии нескольких конструкторов. А у меня один.
А вот виртуальный конструктор - самое то. |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
ну да.... у меня в общем-то и было несколько конструкторов. Но дело в том, что оверлоад также позволяет вызвать конструктор потомка для статично обьявленного конструктора предка. (если я ничего не путаю).
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
||||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
значит путаю
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |