Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Перегрузка подпрограмм




Локальные процедуры и функции

 

Локальной функцией или процедурой называется подпрограмма, которая описана внутри другой подпрограммы. Рассмотрим пример:

 

procedure TForm1.Button1Click(Sender:TObject);

var

X: Integer;

{ Локальная процедура }

procedure Test;

begin

Memo1.Lines.Add(¢Локальная процедура, X = ¢ + IntToStr(X));

end;

begin

X:= 100;

Memo1.Lines.Clear;

Memo1.Lines.Add(¢Основная процедура, X = ¢ + IntToStr(X));

Test;

end;

 

Обратите внимание на то, что описание процедуры Test находится в разделе объявления переменных метода Button1Click. Процедура Test называется локальной постольку поскольку ее описанием владеет другая процедура. Локальная процедура доступна только ее владельцу.

Важным свойством локальных подпрограмм является то что им доступны любые переменные своего владельца. В нашем примере переменная X доступна как подпрограмме Button1Click, так и локальной процедуре Test. Если выполнить код, показанный выше, компонент Memo1 отобразит следующий текст:

 

Основная процедура, X = 100

Локальная процедура, X = 100

 

 

Часто возникает необходимость выполнения одних и тех же действий над данными различных типов. Например, стандартная функция извлечения квадратного корня Sqrt возвращает значение, тип которого совпадает с типом аргумента целого или вещественного. Object Pascal, начиная с Delphi 4, предоставляет разработчикам объявлять одноименные функции и процедуры, принимающие аргументы различных типов. Это называется перегрузкой функций.

 

Новый термин. Перегрузка методов позволяет объявить две (и более) процедуры (или функции) с одинаковыми именами, но с различными списками параметров.

 

Выше мы рассмотрели пример программы с функцией Multiply, которая возвращает результат перемножения двух целых чисел. Допустим, что нам необходимо иметь также и функции, которые перемножают числа типа Double или Word.

 

Благодаря перегрузке, объявления соответствующих функций принимают вид:

 

function Multiply(Num1, Num2: Integer): Integer; overload;

function Multiply(Num1, Num2: Double): Double; overload;

function Multiply(Num1, Num2: Word): Word; overload;

 

Все функции имеют одно и то же имя (Multiply), но в их объявлении присутствует директива overload. Код реализации каждой из этих функций необходимо привести в секции implementation модуля, где они объявлены. При этом не надо обращать внимание на то, что эти функции выполняют одни и те же действия:

 

 

implementation

 

function Multiply(Num1, Num2: Integer): Integer; overload;

begin

Result:= Num1 * Num2;

end;

 

function Multiply(Num1, Num2: Double): Double; overload

begin

Result:= Num1 * Num2;

end;

 

function Multiply(Num1, Num2: Word): Word; overload;

begin

Result:= Num1 * Num2;

end;

 

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

 

var

X, Y, Z: Double;

begin

X:= 1.5;

Y:= 10.5;

Z:= Multiply(X, Y);

end;

 

будет вызвана та версия функции Multiply, которая «принимает» параметры типа Double.

 

ПРИМЕЧАНИЕ: В качестве критерия выбора нужной версии перегружаемой функции компилятор использует список ее фактических параметров. Перегружаемая функция обязательно должна иметь параметры. Так, следующие объявления не допускаются

function DoSomething: Integer; overload;

function DoSomething: Word; overload;

В данной ситуации компилятор выдаст сообщение «Declaration of ¢DoSomething¢ differs from previous declaration».

 

Принцип перегрузки применим к процедурам, функциям и к методам объектов.

 




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


Дата добавления: 2015-04-29; Просмотров: 503; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.