![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| AgereS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 426 Регистрация: 23.6.2004 Репутация: нет Всего: 3 |
никак не могу понять: для чего нужны виртуальные методы в Дельфи. со статическими я кое-как разобрался.
Небольшая предыстория (для того чтобы отвечали по теме). Начинал с Бейсика. Потом перешёл на Паскаль (очень понравилось, что к Паскалю можно подключать всякие модули с встроенными в них процедурами и функциями). Потом перешёл на Дельфи - там я впервые познакомился со всякими объектами-классами (мне это тоже понравилось). Потом узнал что в Паскале тоже есть объекты, как и в Дельфи... А потом... встретился с виртуальными медодами, которые не могу понять (ну не лезет мне это в башню Вот такая вот предыстория... |
|||
|
||||
| <Spawn> |
|
||||||||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Приведу пример, на основе которого, надеюсь, станет понятно. Допустим у тебя есть базовый класс TFigureObject, имеющий виртуальный метод Draw(Пустой)
Тогда ты можешь сделать наследника от этого класса и переопеределить метод Draw. Допустим это будет TEllipse:
И, допустим, есть класс TRectangle:
Тогда если ты, допустим, создашь массив обьектов TFigureObject
и инициализируешь какое то количество элементов этого массива экземплярами классов TEllipse и TRectangle, то при вызове метода FigureObjects[i].Draw будет происходить вызов метода наслединка, то есть будте рисоваться либо эллипс, либо прямоугольник, в зависимости от того экземпляр какого обьекта был добавлен в массив. Ну а если по теории, то для виртуальных(virtual) и динамических методов(dynamic) создается специальная VMT(Virtual Method Table) таблица, на основе которой и осуществляется вызов нужного метода. Так понятно? Это сообщение отредактировал(а) <Spawn> - 23.6.2004, 16:21 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
||||||||
|
|||||||||
| AgereS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 426 Регистрация: 23.6.2004 Репутация: нет Всего: 3 |
Вы не поверите - то же самое я прочитал в книжке, но почему-то не придал этому значения. После Вашего сообщения стало всё понятно.
ЗЫ Как всё-таки здорово в чём нибудь разобраться, пусть с чужой помощью. |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Наверное, читал чего нибудть типа "Delphi 5(6) в подленнике"
Это сообщение отредактировал(а) <Spawn> - 23.6.2004, 16:47 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| AgereS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 426 Регистрация: 23.6.2004 Репутация: нет Всего: 3 |
Object Pascal в Delphi 5
Не подскажите куда мне дальше двигаться в Дельфи, чтобы на месте не стоять (очень прошу Это сообщение отредактировал(а) AgereS - 24.6.2004, 09:39 |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Придумай для себя задачу и реализуй ее, а потом еще и еще и еще... Пока не поймешь, что хорошо понял ту или иную сферу программирования, а потом приступай к другой и ..... короч на всю жизнь хватит, так как технологии не стоят на месте, а стремительными темпами развиваются -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Петрович |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Да, это уже классический пример, причем очень наглядный.
Во во, кстати. А чем-же по сути отличаются virtual-методы от dynamic-методов. Знаю что в реализации отличаются. А вот в каких случаях предпочтительней применять одни а в каких другие, как-то не задумывался. Может поясните, что-бы самому не думать
К сожалению, на мой взгляд единственно правильный способ чему-либо научиться. -------------------- Все знать невозможно, но хочется |
||||||
|
|||||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Я сам не особенно много знаю в этом вопросе, но вот что могу сказать. Динамические и виртуальные методы работают внешне одинаково - вся разница во внутренностях. При создании виртуального метода его адресс помещается во все VMT таблицы всех наследников данного класса, а у динамического ифнормация о динамическом методе предка копируется в наследника, только если в этом наследнике метод был перекрыт. Поиск динамическо метода в VMT производится по специальному уникальному идентификатору. Из за такой структуры, динамические методы вызываются чуть медленнее чем виртуальные, зато при глубокой иерархии классов экономится место в памяти Это сообщение отредактировал(а) <Spawn> - 24.6.2004, 05:10 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| AgereS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 426 Регистрация: 23.6.2004 Репутация: нет Всего: 3 |
Всем спасибо
|
|||
|
||||
![]()
|
| Правила форума "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. |