![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
Я ещё плохо знаю язык. Может кто объяснит что означают это ключевые слова, с чем их едят, зачем применяют? Virtual & Abstract
И ещё вопрос: есть ли в Delphi множественное наследие как в C# или аналогичное. А то я посмотрел серцы компонентов - очень сложно написано. |
|||
|
||||
| Poseidon |
|
|||
![]() 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 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
Спасибки!
|
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Ну что я могу еще сделать? Тут для объяснения одним постом не обойтись. Прочти литературу по этому вопросу, посмотри в FAQ, пройдись поиском по форуму (авось такое уже задовалось). Так по крупицам и соберешь знания
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Думаю такое же, как и в C# Virtual - неопределенный тип, который можно преобразовать в что-то определенное Abstract - объект для наследования. Сам не имеет реализациии, а предназначет исключительно для наследования.
Наследуй хоть до позеленения. Большинство стандартных классов имеют именно множественное наследование. Открой хелп по любому контролу и посмотри иерархию - там штук 3-5 наследований точно имеется. |
||||
|
|||||
| Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
Дык всю жизнь так... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 4 Всего: 110 |
virtual:
предположим, есть класс A и унаследованный от него класс B в каждом есть описание метода virtual используется для выбора того, какой метод вызывать, когда объект класса B представляется в виде объекта класса A предположим, куда-то (в функцию) под видом класса A передается объект класса B вызов обычного метода (без virtual) основывается на информации из заголовка функции - раз передали объект A, значит, и метод надо вызывать класса A вызов виртуального метода основывается на данных объекта - реально ведь это в конце концов объект класса B, так что надо вызывать метод класса B итого:выбор обычного метода зависит от того, как мы рассматриваем объект в данный момент времени, выбор виртуального метода зависит от того, какой класс объекта был использован при создании abstract: бывает так, что есть совокупность классов, которые имеют один и тот же метод более того, иногда нам неинтересно, объект какого именно класса мы используем, нам просто нужно вызвать соответствующий ему метод тогда мы просто делаем суперкласс (предок), от которого наследуем все эти классы, и в нем прописываем этот метод виртуальным все хорошо, теперь там, где нас не интересует, какого именно класса объект, можно просто взять любой объект этого суперкласса и вызвать наш метод (и можно быть уверенным, что метод будет вызван соответствующий - из-за виртуальности) остается одна проблема: что писать в этом методе суперкласса? ведь его мы придумали всего лишь для объединения, объектов напрямую от него в нашей задаче не бывает поэтому можно просто объявить метод абстрактным это значит, что в этом классе недостаточно информации для какой бы то ни было реализации этого метода компилятор не разрешит создать объект напрямую из этого класса (потому, что он не будет знать, какой метод для него вызывать), а в наследниках мы определим этот метод по-нормальному - с телом, и от каждого наследника компилятор уже разрешит создавать объекты... -------------------- qqq |
|||
|
||||
![]()
|
| Правила форума "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. |