| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > помогите с теорией по виртуальным методам |
| Автор: AgereS 23.6.2004, 16:00 |
| никак не могу понять: для чего нужны виртуальные методы в Дельфи. со статическими я кое-как разобрался. Небольшая предыстория (для того чтобы отвечали по теме). Начинал с Бейсика. Потом перешёл на Паскаль (очень понравилось, что к Паскалю можно подключать всякие модули с встроенными в них процедурами и функциями). Потом перешёл на Дельфи - там я впервые познакомился со всякими объектами-классами (мне это тоже понравилось). Потом узнал что в Паскале тоже есть объекты, как и в Дельфи... А потом... встретился с виртуальными медодами, которые не могу понять (ну не лезет мне это в башню Вот такая вот предыстория... |
| Автор: <Spawn> 23.6.2004, 16:20 | ||||||||
Приведу пример, на основе которого, надеюсь, станет понятно. Допустим у тебя есть базовый класс TFigureObject, имеющий виртуальный метод Draw(Пустой)
Тогда ты можешь сделать наследника от этого класса и переопеределить метод Draw. Допустим это будет TEllipse:
И, допустим, есть класс TRectangle:
Тогда если ты, допустим, создашь массив обьектов TFigureObject
и инициализируешь какое то количество элементов этого массива экземплярами классов TEllipse и TRectangle, то при вызове метода FigureObjects[i].Draw будет происходить вызов метода наслединка, то есть будте рисоваться либо эллипс, либо прямоугольник, в зависимости от того экземпляр какого обьекта был добавлен в массив. Ну а если по теории, то для виртуальных(virtual) и динамических методов(dynamic) создается специальная VMT(Virtual Method Table) таблица, на основе которой и осуществляется вызов нужного метода. Так понятно? |
| Автор: AgereS 23.6.2004, 16:38 |
| Вы не поверите - то же самое я прочитал в книжке, но почему-то не придал этому значения. После Вашего сообщения стало всё понятно. ЗЫ Как всё-таки здорово в чём нибудь разобраться, пусть с чужой помощью. |
| Автор: <Spawn> 23.6.2004, 16:44 |
| Наверное, читал чего нибудть типа "Delphi 5(6) в подленнике" |
| Автор: AgereS 23.6.2004, 16:51 |
| Object Pascal в Delphi 5 Не подскажите куда мне дальше двигаться в Дельфи, чтобы на месте не стоять (очень прошу |
| Автор: <Spawn> 23.6.2004, 18:04 | ||
Придумай для себя задачу и реализуй ее, а потом еще и еще и еще... Пока не поймешь, что хорошо понял ту или иную сферу программирования, а потом приступай к другой и ..... короч на всю жизнь хватит, так как технологии не стоят на месте, а стремительными темпами развиваются |
| Автор: Петрович 24.6.2004, 00:03 | ||||||
Да, это уже классический пример, причем очень наглядный.
Во во, кстати. А чем-же по сути отличаются virtual-методы от dynamic-методов. Знаю что в реализации отличаются. А вот в каких случаях предпочтительней применять одни а в каких другие, как-то не задумывался. Может поясните, что-бы самому не думать
К сожалению, на мой взгляд единственно правильный способ чему-либо научиться. |
| Автор: <Spawn> 24.6.2004, 05:09 | ||
Я сам не особенно много знаю в этом вопросе, но вот что могу сказать. Динамические и виртуальные методы работают внешне одинаково - вся разница во внутренностях. При создании виртуального метода его адресс помещается во все VMT таблицы всех наследников данного класса, а у динамического ифнормация о динамическом методе предка копируется в наследника, только если в этом наследнике метод был перекрыт. Поиск динамическо метода в VMT производится по специальному уникальному идентификатору. Из за такой структуры, динамические методы вызываются чуть медленнее чем виртуальные, зато при глубокой иерархии классов экономится место в памяти |
| Автор: AgereS 24.6.2004, 09:51 |
| Всем спасибо |