Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория 6.doc
Скачиваний:
0
Добавлен:
05.05.2019
Размер:
123.9 Кб
Скачать

4.5. Процедурные типы данных

В заключение, мы вернемся к информационной структуре программы разберем такое важное для программирования на Delphi понятие, как процедурные типы данных.

Переменные процедурного типа представляют собой ссылки на подпрограммы — процедуры и функции. Описание типа строится на основе сигналы подпрограммы без указания имени:

<Назвзвание типа> = Procedure(<Список параметров>)

Или для функций:

Туре

<Название типа> = Function(<Список параметров>): <Возвращаемое значение>;

Допускается описание переменной в разделе Var без введения в про­грамму нового процедурного типа, например:

Var

fSin = Function(X: Double): Double;

Как и переменные любого другого типа, процедурные переменные пос­ле описания не определены. Для инициализации процедурной перемен­ной необходимо присвоить ей адрес подпрограммы, доступной текуще­му фрагменту программы, в котором выполняется присвоение. Для получения адреса подпрограммы используется ее имя:

<Название переменной> = <Название подпрограммы:*;

После инициализации переменная процедурного типа используется так же, как и вызов обычной подпрограммы, то есть вместо названия под­программы указывается название процедурной переменной:

<Название переменной>(<Список параметров>);

Рассмотрим пример описания процедурного типа данных, переменной на его основе, ее инициализации и использования (листинг 4.10).

Листинг 4.10. Пример использования процедурного типа данных

Unit Procedural;

Interface

Type

fMathFunct = Function (Arg: Double): Double;

{Описание процедурного типа fMathFunct — указателя на функцию с одним вещественным аргументом, возвращающую вещественное значение}

Implementation

Function Sin2(X: Double): Double;

begin

Result := Sin(X) * Sin (X) ;

end; {Описание функции Sin2, совместимой

с процедурным типом fMathFunct, и построенной на основе стандартной функции Sin}

Procedure UseProcedural;

{Описание процедуры, использующей процедурные типы}

Var

F: fMathFunct;{Описание процедурной переменной F} Res: Double; begin F := Sin2; {Присвоение процедурной переменной ссылки

на функцию Sin2} F(l); {Вызов функции Sin2 через процедурную

переменную F} Res := F(3); end; End.

Для описания процедурного типа, который указывает не просто на под­программу, а на метод экземпляра класса, после описания процедурного типа используется конструкция Of Object, например:

Var

ProcTypel = Procedure(S: AnsiString) Of Object;

На использовании ссылок на методы объектов построена система сооб­щений компонентов Delphi.