Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы IT / ЛабаDelphi7.doc
Скачиваний:
62
Добавлен:
06.02.2015
Размер:
265.73 Кб
Скачать

Задание 1.5. Создадим простую, отдельную от какого либо класса функцию с именем Bush(X,y:integer):integer возвращающую значение произведения X*y.

Создайте новый проект.

Опишем её в окне редактора кода, в разделе реализации после ключевого слова implementation и директивы {$R *.dfm}, должно выглядеть следующим образом:

Рис. 9 Описание функции с именем «Bush» отдельной от какого–либо класса

Сбросьте Button1 и RichEdit1 из палитры Win32 на форму (RichEdit1 очень похож на Memo1, но по функциональности RichEdit1 значительно лучше).

Сначала, как и ранее будем вызывать процедуру Bush из обработчика щелчка на Button1 и выводить возвращаемое ей значение в RichEdit1. Напишите в обработчике щелчка на Button1 следующее:

var a:integer;

begin

RichEdit1.Clear; //очищаем RichEdit1

a:=bush(3,5);// помещаем возвращаемое функцией значение в переменную a

RichEdit1.Lines.Add('Bush ='+IntToStr(a)); // выводим это значение в Richedit1

end;

Запустите программу, убедитесь в правильности её работы, вернитесь в режим программирования.

Перегрузка функций.

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

Таким образом, если две или более функции имеют одинаковое имя, то говорят что они перегружены. Это воплощение одного из базисных принципов программирования под названием – полиморфизм (от греческого polymorphos) – свойство, которое позволяет использовать одно и то же имя для решения схожих задач.

Задание 1.6. Напишем ещё две перегруженные функции с тем же именем Bush.

Bush(X, Y, Z:word):word; //будет возвращать значение выражения (X+Y)*Z

// типа word

Bush(S, C:string):string; //будет возвращать строку «склеенную» из S и C

// типа string

Каждая перегруженная процедура или функция обозначается ключевым словом Overload справа от её объявления.

Конечно, функции и процедуры можно перегружать и когда они принадлежат некоторому классу, то есть можно перегружать методы класса.

В окне редактора кода допишите следующие две дополнительные функции отмеченные, словом Overload:

Рис. 10 Описание перегруженных функций с одинаковым именем «Bush»

Теперь, как и прежде вызовем из обработчика Button1 всё варианты функции Bush.

Измените код в обработчике щелчка Button1 на следующий:

var a:integer; b:word; Stroka:string;

begin

RichEdit1.Clear; //очищаем

a:=Bush(3,5);

RichEdit1.Lines.Add('Bush(X,Y:integer):integer; ='+IntToStr(a));

b:=Bush(1,3,5);

RichEdit1.Lines.Add('Bush(X,Y,Z:word):word; ='+IntToStr(b));

Stroka:=Bush('Мощный ','Процессор');

RichEdit1.Lines.Add('Bush(S,C:string):string; ='+Stroka);

end;

Запустите программу, убедитесь в правильности её работы, вернитесь в режим программирования.

Задание 1.7. Изучим Основной блок Begin и End модуля.

Обратим внимание на структуру модуля Unit1.pas.

Найдите самый последний End который заканчивается точкой назовем его “Главный End” модуля. И сразу перед ним напишите слово Begin назовем его “Главный Begin” модуля.

Можно сказать, что Главный Begin и Главный End образуют Основной блок модуля. Внутри данного блока может располагаться любой код.

Причем при запуске программы данный код будет исполняться сразу же первым. Также над главным Begin может сразу располагаться Var.

Добавьте следующий код в основной блок:

var a:integer; b:word; Stroka:string;

Begin // Главный Begin модуля

Application.CreateForm(TForm1, Form1);

Form1.RichEdit1.Clear;

Form1.RichEdit1.Lines.Add('Я ОСНОВНОЙ БЛОК МОДУЛЯ - ВЫПОЛНЯЮСЬ ВНАЧАЛЕ');

end. // Самый последний, Главный End модуля

Обратите внимание, что теперь всегда требуется указывать полностью имя метода объекта, который вызывается, и вместо RichEdit1.Lines.Add('') требуется писать Form1.RichEdit1.Lines.Add(''); так как вызов метода Lines.Add объекта RichEdit1 вызывается из основного блока, а не из метода класса TForm1 как в обработчике TForm1.Button1Click(Sender: TObject).

Также обратите внимание на инструкцию Application.CreateForm(TForm1, Form1); Она нужна для того, чтобы сформировать в памяти компьютера саму форму (объект Form1 класса TForm1) со всеми компонентами располагающимися на ней. Если её не написать в самом начале, то невозможно будет обратиться ни к одному компоненту, ни к самой форме, так как она не сформирована в памяти и для неё не существует дескриптора.

Но нам не нужно вызывать эту инструкцию дважды, нажмите Ctrl+F12, выберете Project1 и нажмите OK. Теперь закомментируйте инструкцию Application.CreateForm(TForm1, Form1); так, чтобы компилятор её не воспринимал, или просто сотрите её (рис. ):

Рис. 11 Редактирование файла проекта

Запустите программу, убедитесь, что при запуске в RichEdit1 сразу же отображаются результаты работы вашего кода в основном блоке. Вернитесь в режим программирования.

автор и разработчик лабораторных

работ по Delphi

доцент кафедры Информационных технологий и систем

кандидат физ.-мат. наук

Санников Е.В.

Соседние файлы в папке Лабы IT