Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Перегружаемые подпрограммы




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

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

Для того, чтобы компилятор мог выбрать правильную подпрограмму из нескольких перегруженных, они должны отличаться так называемой сиг­натурой — последовательностью типов данных в списке параметров. Также перегружаемые подпрограммы должны быть помечены ключевым словом overload. Пример описания и использования перегружаемой подпрог­раммы приведен в листинге 4.9.

Листинг 4.9. Использование перегружаемой подпрограммы

Unit DeclaringOverloads Interface

Function GetName(A:

Implementation

(Заголовок модуля} {Указание на начало интерфейсной секции} Function GetName(S: String): String; overload;

{Заголовок функции GetName с одним строковым параметром} Integer): String; overload;

{Заголовок функции GetName с одним числовым параметром} {Указание на начало описательной секции} Uses

SysUtils; {Подключение модуля SysUtils для

доступа к функции IntToStr}

Function GetName(S: String): String; overload; begin

Result:= S;

end; {Описание функции GetName с одним

строковым параметром, в качестве результата возвращается параметр}

Function GetName(A: Integer): String; overload; begin

Result:= IntToStr (A); {Описание функции GetName с одним числовым параметром, в качестве результата возвращается строковое представление параметра}

end;

End. {Окончание модуля}

 

Досрочный выход из подпрограммы

Подпрограммы являются довольно крупными логическими единицами программы и выполняют обычно довольно сложные действия. Необхо­димый результат, ожидаемый от процедуры или функции — выполнение каких-либо действий или расчет возвращаемого значения — может быть получен при выполнении не всего кода подпрограммы, а только его ча­сти. Поэтому подпрограммы снабжены механизмом досрочного заверше­ния, реализуемым процедурой Exit:

Procedure Exit;

Результатом выполнения процедуры Exit будет передача управления от подпрограммы к фрагменту программы, вызвавшему ее. Если Exit вы­зывается в основной части программы, а не в процедуре или функции, то завершится программа.

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

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

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

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

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

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

Туре

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

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

Var

fSin = Function(X: Double): Double;

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

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

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

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

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





Поделиться с друзьями:


Дата добавления: 2015-10-19; Мы поможем в написании ваших работ!; просмотров: 446 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Логика может привести Вас от пункта А к пункту Б, а воображение — куда угодно © Альберт Эйнштейн
==> читать все изречения...

2227 - | 2156 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.