Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что такое абстрактный класс ?


DrAlban ©   (2002-09-18 20:49:00) 

Или абстрактный метод ? Точно уж не помню, кто-то говорил - забыл. В общем, после его объявления идет слово abstract


Юрий Зотов   (2002-09-18 21:44:00) [1]

> Какой же смысл создавать от него объект?

Иногда смысл есть - если точно известно, что неперекрытый абстрактный метод никогда и никем не будет вызван. Используется, например, в экспертах IDE, чтобы не плодить лишний код.


ATR   (2002-09-18 21:41:00) [2]

2Song
Запросто. Создать-то можно. А вот использовать конечно не получиться.


Kibitzer   (2002-09-18 21:33:00) [3]

От абстрактного класса можносоздать объект. Но при вызове любого абстрактного метода, стопудово получите сообщение: Abstract error. Какой же смысл создавать от него объект?


Kibitzer   (2002-09-18 21:28:00) [4]

Да. Самый яркий пример абстрактого класса (по моему :)) - класс TStrings, от которого произошли его многочисленные потомки: TStringList, TMemoStrings, TListBoxStrings, TStringGridStrings, TTabStrings,...
Блягодаря этому я могу сказать, например: ListBox1.Items := Memo1.Lines(так как и свойство Itemsу TListBox, и свойство Linesу TMemoобъявлены как TStrings)


Song   (2002-09-18 21:26:00) [5]

2ATR (18.09.02 21:20)
Ну попробуйте например выполнить такой код хотя бы: TStrings.Create.. посмотрю я на Ваше "можно"


Song   (2002-09-18 21:20:00) [6]

Нет.


ATR   (2002-09-18 21:20:00) [7]

Можно, но вот только зачем это надо.


DrAlban   (2002-09-18 21:16:00) [8]

То есть экземпляр абстрактного класа создать нельзя ?


Kibitzer   (2002-09-18 21:13:00) [9]

Абстрактный метод - это метод который объявлен в классе, но не реализован (в разделе implementation ). Абстрактный метод должен быть обязательно либо virtual , либо dynamic (чтобы потомки могли его реализовать).
А абстрактный класс - это класс у которого есть абстрактные методы. По идее от абстрактного класса объектов не создают, а служит он, как скелет для создания многочисленных потомков.


ATR   (2002-09-18 21:05:00) [10]

Методы которые определены в классе, но не содержат никаких действий и обязательно должны быть переопределены в потомках класса. Пример:

TMyClass = class(TComponent)
protected
procedure MyProc; virtual; abstract;
end;

TMyNewClass = class(TMyClass)
protected
procedure MyProc; override;
end;
.....
{ TMyNewClass }

procedure MyProc;
begin
....
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо