Разное
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Дата изменения файла
Категория: Файловая система
Категория: Файловая система
Округление целого числа до 5
Категория: Математика
Категория: Математика
Как произвести поиск файлов во вложенных папках
Категория: Файловая система
Категория: Файловая система
Узнать все IP-адреса компьютера
Категория: Интернет и Сети
Категория: Интернет и Сети
Получить первую и последнюю видимую строку в TRichEdit
Категория: Текст и строки
Категория: Текст и строки
Как получить код HTM страницы зная ее URL
Категория: Интернет и Сети
Категория: Интернет и Сети
Получить типы полей таблицы
Категория: Базы данных
Категория: Базы данных
Показать удаленные записи в DBase
Категория: Базы данных
Категория: Базы данных
Узнать запущен ли сервис FireBird
Категория: Интернет и Сети
Категория: Интернет и Сети
Вызов контекстного меню в позиции курсора
Категория: Компоненты
Категория: Компоненты
Delphi - Справочник: Abstract
Abstract
|
Function|Procedure declaration; Virtual; Abstract; |
Деректива (Unit )
|
Определяет метод класса, осуществляемый только в подклассах
|
Описание:
|
Директива Abstract определяет метод класса, как осуществляемый только в полученных классах. Это абстрактно в том смысле, что она является меткой - заполнителем, она не выполняется в текущем классе, но должна быть осуществлена в любых полученных классах. Она используется, там где базовый класс всегда обрабатывается как скелетный класс. Где такой класс непосредственно никогда не используется, а используются только основанные классы, когда-либо проиллюстрированные в объектах. Например, класс TAnimal может иметь абстрактный метод для того, как животное перемещается. Только при создании, скажем, TCat класс, основанный на TAnimal будет Вы осуществлять этот метод. В этом образце, кот перемещается, идя. Класс Abstract должен использоваться, чтобы квалифицировать виртуальный класс, так как мы не осуществляем класс (см. Virtual для больших подробностей). |
Пример кода: Класс скелета многоугольника с основанными классами треугольника и квадрата
|
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Forms, Dialogs, Classes, Controls, StdCtrls, SysUtils; type // Определение базового класса TPolygon : // Этот класс - треугольник если 3 стороны, квадрат если 4 стороны... TPolygon = class private sideCount : Integer; // Сколько сторон? sideLength : Integer; // Какой длины каждая сторона? shapeArea : Double; // Площадь многоугольника protected procedure setArea; Virtual; Abstract; // Не может закодировать пока стороны не известны published property count : Integer read sideCount; property length : Integer read sideLength; property area : Double read shapeArea; constructor Create(sides, length : Integer); end; // Определение потомков треугольника и квадрата TTriangle = class(TPolygon) protected procedure setArea; override; // Замена абстрактного метода end; TSquare = class(TPolygon) protected procedure setArea; override; // Замена абстрактного метода end; // Определение класса формы используемой этим модулем TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // Вложение определений формы // Создание объекта TPolygon constructor TPolygon.Create(sides, length : Integer); begin // Сохранение числа и длины сторон sideCount := sides; sideLength := length; // Установка области, используя метод setArea : // Этот запрос будет удовлетворён только подклассом setArea; end; // Выполнение родительского для треугольника абстрактного метода setArea procedure TTriangle.setArea; begin // Вычисление и сохранение площади треугольника shapeArea := (sideLength * sideLength*0.866) / 2; end; // Выполнение родительского для квадрата абстрактного метода setArea procedure TSquare.setArea; begin // Вычисление и сохранение площади квадрата shapeArea := sideLength * sideLength; end; // Основная линия кода procedure TForm1.FormCreate(Sender: TObject); var triangle : TTriangle; square : TSquare; begin // Создание треугольника и квадрата triangle := TTriangle.Create(3, 10); square := TSquare.Create(4, 10); // Показ значений площади наших многоугольников : ShowMessageFmt('Площадь тругольника = %f',[triangle.area]); ShowMessageFmt('Площадь квадрата = %f',[square.area]); end; end.
Результат:
|
Площадь тругольника = 43.3 Площадь квадрата = 100.0 |
Примечание:
|
Если Вы создаете образец класса, который имеет метод Abstract, то delphi предупреждает вас, что имеется невызываемый метод. Если затем вы попробуете вызвать этот метод, Delphi попробует вызвать AbstractErrorProc. Если AbstractErrorProc не найден, выбрасывается исключение EAbstractError. |