|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.04.2008, 21:07 | #1 |
Форумчанин
Регистрация: 16.01.2008
Сообщений: 288
|
Виртуальный функции.
Объясните пожалуйсто, кто при думал виртуальные функции и для чего они нужны. Литературы много, но там как-то сложно написанно: толи они нужны предкам, толи потомкам; создается какае-то таблица виртуальных методво. И какой-нибудь маленький и понятный пример: что не будет работать без виртуальных функций и как это исправить с их помощью (на Паскале).
Заранее спасибо. |
10.04.2008, 21:13 | #2 |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
В интернету много есть статей толковых по этому поводу...
Вроде понятно написанно здесь: http://club.shelek.com/viewart.php?id=239
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
10.04.2008, 22:02 | #3 |
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
Рисование разнородных объектов одного базового класса в цикле. Сравни с комментариями и без. Во втором случае вызов функции осуществляется на основе фактического типа объекта.
Код:
|
11.04.2008, 10:28 | #4 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Виртуальные методы позволяют реализовать полиморфизм - т.е. разное поведение при одном и том же коде. Благодаря им у нас есть возможность написать некий обобщенный код, который вызывает виртуальные функции, но его конкретное поведение зависит от того, для каких именно классов он выполняется. Пример:
в Delphi есть такой класс - TStream, который представляет собой некое абстрактное хранилище данных. У класса есть методы - Read и Write, которые позволяют соответственно читать и писать данные в это хранилище. Эти методы виртуальные и конкретное их поведение определяется потомками. Так у потомка TFileStream эти методы перекрыты так, что читают и пишут в файл, у TMemoryStream - в память и т.д. Но мы можем не знать какой у нас конкретно потомок TStream, а написать полиморфный код, вроде такого: procedure SaveToStream(Stream: TStream); Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Виртуальный порт | Dj_smart | Win Api | 0 | 13.07.2008 19:19 |
']'-виртуальный код | Var17 | Общие вопросы Delphi | 2 | 02.04.2008 14:11 |
виртуальный процессор | darkstoun | Помощь студентам | 3 | 23.11.2007 21:12 |