Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Abstract & Virtual 
:(
    Опции темы
Ch0bits
Дата 29.4.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Я ещё плохо знаю язык. Может кто объяснит что означают это ключевые слова, с чем их едят, зачем применяют? Virtual & Abstract smile

И ещё вопрос: есть ли в Delphi множественное наследие как в C# или аналогичное. smile
А то я посмотрел серцы компонентов - очень сложно написано.
PM WWW   Вверх
Poseidon
Дата 29.4.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Директива abstract записывается после слова virtual и исключает необходимость написания кода виртуального метода для данного класса. Такой метод называется абстрактным, т.е. подразумевает конкретное логическое действие, а не способ его реализации. Абстрактные виртуальные методы часто используются при создании классов-полуфабрикатов. Свою реализацию такие методы получают в законченных наследниках.

Добавлено @ 21:06
Еще смотри в FAQ http://vingrad.ru/DELPHI-DLP-000193
Добавлено @ 21:08
Про множественное наследие тут http://vingrad.ru/DELPHI-DLP-000185


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Ch0bits
Дата 29.4.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Спасибки! smile Только я ничего не понял... smile
PM WWW   Вверх
Poseidon
Дата 29.4.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Ну что я могу еще сделать? Тут для объяснения одним постом не обойтись. Прочти литературу по этому вопросу, посмотри в FAQ, пройдись поиском по форуму (авось такое уже задовалось). Так по крупицам и соберешь знания smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Snowy
Дата 29.4.2005, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Vadim999 @ 29.4.2005, 19:42)
Virtual & Abstract

Думаю такое же, как и в C# smile
Virtual - неопределенный тип, который можно преобразовать в что-то определенное
Abstract - объект для наследования. Сам не имеет реализациии, а предназначет исключительно для наследования.

Цитата(Vadim999 @ 29.4.2005, 19:42)
сть ли в Delphi множественное наследие как в C#

Наследуй хоть до позеленения. Большинство стандартных классов имеют именно множественное наследование.
Открой хелп по любому контролу и посмотри иерархию - там штук 3-5 наследований точно имеется.
PM MAIL   Вверх
Ch0bits
Дата 29.4.2005, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Цитата(Poseidon @ 29.4.2005, 21:47)
Так по крупицам и соберешь знания

Дык всю жизнь так... smile
PM WWW   Вверх
maxim1000
Дата 30.4.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 4
Всего: 110



virtual:
предположим, есть класс A и унаследованный от него класс B
в каждом есть описание метода
virtual используется для выбора того, какой метод вызывать, когда объект класса B представляется в виде объекта класса A
предположим, куда-то (в функцию) под видом класса A передается объект класса B
вызов обычного метода (без virtual) основывается на информации из заголовка функции - раз передали объект A, значит, и метод надо вызывать класса A
вызов виртуального метода основывается на данных объекта - реально ведь это в конце концов объект класса B, так что надо вызывать метод класса B
итого:выбор обычного метода зависит от того, как мы рассматриваем объект в данный момент времени, выбор виртуального метода зависит от того, какой класс объекта был использован при создании
abstract:
бывает так, что есть совокупность классов, которые имеют один и тот же метод
более того, иногда нам неинтересно, объект какого именно класса мы используем, нам просто нужно вызвать соответствующий ему метод
тогда мы просто делаем суперкласс (предок), от которого наследуем все эти классы, и в нем прописываем этот метод виртуальным
все хорошо, теперь там, где нас не интересует, какого именно класса объект, можно просто взять любой объект этого суперкласса и вызвать наш метод (и можно быть уверенным, что метод будет вызван соответствующий - из-за виртуальности)
остается одна проблема: что писать в этом методе суперкласса?
ведь его мы придумали всего лишь для объединения, объектов напрямую от него в нашей задаче не бывает
поэтому можно просто объявить метод абстрактным
это значит, что в этом классе недостаточно информации для какой бы то ни было реализации этого метода
компилятор не разрешит создать объект напрямую из этого класса (потому, что он не будет знать, какой метод для него вызывать), а в наследниках мы определим этот метод по-нормальному - с телом, и от каждого наследника компилятор уже разрешит создавать объекты...


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.