- •Рекурсивные алгоритмы (продолжение)
- •I, j: integer;
- •I, j: integer;
- •I, j: integer;
- •Метод динамического программирования
- •I, j: integer;
- •I, j: Integer;
- •I, j: integer;
- •Тип «Денежный»
- •Стандартные процедуры и функции для работы с любыми файлами
- •Текстовый файл
- •Стандартные процедуры для работы с текстовыми файлами
- •Условная компиляция
- •I, j: Integer;
- •I, j: Integer;
- •I, j: Integer;
- •I, j: integer;
- •Тип «Указатель»
- •Динамические структуры данных Линейный однонаправленный список
- •Объектно-ориентированное программирование (ооп)
- •Объявление класса
- •Interface
- •Implementation
- •Interface
- •Implementation
Объявление класса
<Имя класса> = class(<Имя базового класса>)
private
<Объявление закрытых полей и методов>
// Все, что объявлено здесь, может быть использовано только в данном модуле
protected
<Объявление открытых полей и методов>
// Все, что объявлено здесь, может быть использовано
// и в данном модуле, и во всех классах-наследниках данного класса
public
<Объявление открытых полей и методов>
// Все, что объявлено здесь, может быть использовано везде, где виден класс
published
<Объявление открытых полей и методов>
end;
Всё, что объявлено в разделе published, может быть использовано везде, где виден класс.
Раздел published может присутствовать, только если включен режим «динамическая идентификация типа данных» (Run-time type information, Run-time type identification, RTTI), который позволяет определить тип данных переменной или объекта во время выполнения программы.
Режим RTTI должен быть включен с помощью ключа {$M+}.
http://www.rsdn.ru/Forum/message/704173.flat.aspx
Конструктор
Объявление:
constructor TList1.Create;
begin
inherited Create;
// inherited;
pHead := Nil;
pTail := Nil;
nItems := 0;
end;
Обращение:
MyList1 := TList1.Create;
Обращение происходит к методу класса.
Деструктор
Объявление:
destructor TList1.Destroy;
begin
inherited Destroy;
// inherited;
end;
Обращение:
MyList1.Destroy;
Обращение происходит к методу объекта.
Пример построения линейного однонаправленного списка,
использующий ООП
Проект строится в «DOS-овском» режиме и имеет имя Project1 (по умолчанию). Для его построения из верхнего меню следует пройти маршрутом:
File – New – Other – Console Application.
За основу взят код предыдущей программы. Список формируется на основе данных из текстового файла, содержащего чётное количество строк. Каждая нечётная строка содержит фамилию работника, каждая чётная – его месячный заработок.
Образец такого файла:
Inanov
24000
Sidorov
19000
Petrov
28000
Petrov
17500
Andrianov
21000
Andreev
27500
Yakovlev
32500
Проект состоит из четырёх файлов, содержащих коды на языке Pascal.
Файл Project1.dpr обращается к кодам (описаниям классов), представленным в трёх файлах-«устройствах» Unit1.pas, Unit2.pas, Unit3.pas, присоединённых к проекту.
В файле Unit1.pas описан базовый класс MyList1Class, способный к формированию линейного однонаправленного списка в оперативной памяти. Каждый новый элемент списка ставится в конец списка. Назначение методов класса пояснено комментариями.
В файле Unit2.pas описан класс MyList2Class – наследник базового класса MyList1Class. Все методы базового класса сохраняют силу, а в дополнение появляются два новых метода: PrependItem и PrependFromFile. С их помощью каждый новый элемент списка ставится в начало списка.
Текст файла Project1.dpr:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1 in 'Unit1.pas',
Unit2 in 'Unit2.pas',
Unit3 in 'Unit3.pas';
var
MyList1: MyList1Class;
MyList2: MyList2Class;
MyList3: MyList3Class;
begin
MyList1 := MyList1Class.Create;
MyList1.AppendFromFile('c: List1.txt');
MyList1.ShowList;
WriteLN;
MyList2 := MyList2Class.Create;
MyList2.PrependFromFile('c: List2.txt');
MyList2.ShowList;
WriteLN;
MyList3 := MyList3Class.Create;
MyList3.InsertFromFile('c: List1.txt');
MyList3.ShowList;
Readln;
end.
Текст файла Unit1.pas:
unit Unit1;