Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2010, 13:11   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Abstract, Virtual, ...

Ребят, может кто поделиться информацией по поводу этих директив? Когда они ставятся, за чем? А то сам ничего толкового не могу найти, кроме дельфисорсес сайта, на котором ничего для меня не понятно...

Цитата:
Директива Abstract определяет метод класса как реализуемый только в классах-наследниках. Он абстрактен в смысле того, что является "заглушкой" - он не имеет реализации в текущем классе, но должен быть реализован классах-наследниках.

Это используется в том случае, когда базовый класс рассматривается как класс-"скелет". Такие классы никогда не используются напрямую - только основанные на них классы используются для создания объектов этих классов.

Например, класс TAnimal может иметь абстрактный метод для задания движения животного. Только когда создается, скажем, класс TCat, основанный на TAnimal, вы можете реализовать этот метод. В этом экземпляре, кот передвигается с помощью ходьбы.

Класс Abstract должен использоваться при определении виртуального класса, так как мы не создали реализацию класса (см. Virtual для деталей)
А вот виртуал пока не нашел...
Вобщем и про виртуал нашел... Абстрактным методом может быть только виртуальный или динамический метод. Вот и всё. Сам спросил - сам ответил...
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 15.08.2010 в 13:33.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 15.08.2010, 14:10   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Читать отсюда и до просветления.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 15.08.2010, 14:13   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

абстрактный методы нужны для полиморфизма, явный пример это классы TStrings и TStream. у них масса потомков, но ведь нам поидее всеравно какой именно поток у нас, TFileStream или TMemoryStream, работа ведется одинакого.
виртуальные методы нужны для обьявления метода который может быть корректно переопределен в потомке(опять же для полиморфизма), указатели на виртуальные методы хранятся в VMT класса, в то время как обычные методы являются статическими.(мооу показать разницу на асме если надо)
допустим так:
Код:
type
 TMyC1=class
  procedure My;{virtual;}
 end;
 
 TMyC2=class(TMyC1)
  procedure My;{override;}
 end;

---------------------
procedure TMyC1.My;
begin
 ShowMessage('C1');
end;

procedure TMyC2.My;
begin
 ShowMessage('C2');
end;
теперь выполним такой код.
Код:
var T:TMyC1;
begin
 T:=TMyC2.Create;
 T.My; 
 T.Free;
end;
в таком случае выполнится метод TMyC1.My не взирая на то что у нас иного типа объект.
а если убрать комменты, то все будет как надо.(override означать "перегрузить" метод, чтоб уведомить компилятор что мы перезагружаем метод, а не определили новый с тем же именем)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.08.2010, 14:53   #4
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Абстрактные методы в классах не реализуются, но должны быть реализованы в потомках этих классов.

Последний раз редактировалось r9m; 15.08.2010 в 14:58.
r9m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Virtual TreeView Шульц Общие вопросы Delphi 3 25.10.2009 09:48
abstract methods NieL Общие вопросы Delphi 5 09.01.2009 12:21
Form1.Free; Abstract Error Манжосов Денис :) Общие вопросы Delphi 3 21.08.2008 15:46