
- •Основы программирования
- •Введение
- •Основы delphi
- •Общая технология программирования
- •Язык программирования
- •Объектно-ориентированное программирование
- •Визуальное программирование
- •Событийно управляемое программирование
- •Windows-приложение
- •Среда программирования
- •Первоначальные сведения о проекте приложения
- •Встроенный отладчик
- •Использование встроенных классов
- •Иерархия классов
- •Использование палитры компонентов и инспектора объектов
- •Использование графики
- •Основные инструменты
- •Основные характеристики шрифтов
- •Графические данные и палитра
- •Некоторые общие свойства компонентов
- •Сохранение проекта
- •Построение простейшего проекта
- •Понятие исключительной ситуации
- •Введение в object pascal
- •Структура приложения
- •Структура программы-проекта
- •Структура модуля
- •Пример 1
- •Описания программных элементов
- •Программные элементы и адреса памяти
- •Области видимости
- •Правила записи имен
- •Время жизни идентификаторов
- •Использование локальных переменных в примере 1
- •Использование глобальных переменных в примере 1
- •Простые типы
- •Целые типы
- •Целые типы
- •Некоторые операции с целым типом
- •Символьные типы
- •Логические типы
- •Тип перечень
- •Интервальный тип
- •Вещественный тип
- •Вещественные типы
- •Некоторые операции с вещественным типом
- •Тип дата-время
- •Выражения
- •Константы
- •Типизированные константы.
- •Переменные
- •Операции
- •Унарная операция not (отрицание)
- •Логические операции and, or, xor
- •Функции
- •Порядок вычисления выражений
- •Виды операторов
- •Простые операторы
- •Составной оператор
- •Операторы условного перехода
- •Оператор if
- •Пример 2
- •Оператор case
- •Пример 3
- •Использование enter в примере 3
- •Операторы цикла
- •Оператор цикла for
- •Пример 4
- •Оператор цикла while
- •Пример 5
- •Оператор цикла repeat
- •Пример 6
- •Использование процедур break и continue
- •Пример 7
- •Массивы
- •Статические массивы
- •Динамические массивы
- •Пример 8
- •Пример 9
- •Записи (объединения)
- •Оператор with
- •Пример 10
- •Совместимость и преобразование типов данных
- •Идентичность типов
- •Совместимость типов
- •Совместимость по присваиванию
- •Преобразование типов
- •Операторы обработки исключительных ситуаций
- •Пример 11
- •Множества
- •Операции над множествами
- •Пример 12
- •Вариантный тип данных
- •Процедуры и функции
- •Процедура
- •Функция
- •Рекурсия
- •Формальные и фактические параметры
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры без типа
- •Массивы открытого типа
- •Парамеры по умолчанию
- •Процедура exit
- •Директивы подпрограммы
- •Соглашения по передаче данных
- •Директива forward
- •Директива external
- •Директива assembler
- •Перегруженные подпрограммы
- •Пример 13
- •Инкапсуляция
- •Класс как объектный тип
- •Наследование
- •Области видимости
- •Операции is и as
- •Виды методов
- •Методы virtual и полиморфизм
- •Методы dynamic
- •Методы message
- •Методы abstract
- •Методы override
- •Методы class
- •Пример 14
- •Динамическое создание компонентов
- •Использование класса со счетчиком объектов
- •Отслеживание разрушения объектов
- •События
- •Указатели на методы
- •Пример 15
- •Типы ссылки на класс
- •Свойства
- •Свойства simple
- •Свойства enumerated
- •Свойства set
- •Свойства object
- •Свойства array
- •Задание начальных значений свойствам
- •Пример 16
- •Файловые типы
- •Текстовые файлы
- •Типизированные файлы
- •Файлы без типа
- •Дополнительные процедуры и функции
- •Пример 17
- •Компонент tmainmenu
- •Указатели
- •Пример 18
- •Динамические структуры данных
- •Однонаправленные списки
- •Двунаправленные списки
- •Стеки, очереди
- •Бинарные деревья
- •Пример 19
- •Процедурный тип
- •Программные единицы dll
- •Пример 20
- •Технологии программирования
- •Потоки данных
- •Пример 21
- •Пример 22
- •Интерфейс drag and drop
- •Пример 23
- •Технология drag and dock
- •Пример 24
- •Использование функций windows api при работе с файлами
- •Пример 25
- •Использование отображаемых файлов
- •Пример 26
- •Программные потоки
- •Приоритеты потоков
- •Класс tthread
- •Пример 27
- •Использование блокировки в примере 27
- •Многопоточное приложение в примере 28
- •Проблемы синхронизации потоков
- •Список используемых в примерах компонентов
- •Список используемых компонентов и других классов
- •Библиографический список
- •Оглавление
Записи (объединения)
С помощью зарезервированного слова record в единой структуре можно объединить данные разных типов. Общий синтаксис объявления такого объединения следующий:
Type <имя типа> = Record
<Список полей>: <тип>;
<Список полей>: <тип>;
. . . . . . . . . . ;
End;
Поля записи (или объединения) могут быть любого типа, количество их не ограничено. Например,
Type
Complex = record {Тип комплексных чисел}
Re, Im: real;
end;
Data = record {Тип – дата рождения}
Year:word;
Month: 1..12;
Day: 1..31;
end;
Person = record {Тип – сведения о сотруднике}
Name: string[40];
Age: word;
Adres: string[80];
end;
Количество памяти, выделяемой под запись, может быть различным в зависимости от директивы {$A} (выравнивание). Если установлено {$A+}, то поля выравниваются по четным адресам - уменьшается время доступа к переменной в памяти. По умолчанию установлено {$A-}. Перед ключевым словом record можно добавить слово Packed. В этом случае под запись выделяется минимальное количество байт, причем директива {$A} игнорируется.
После объявления типа можно задать переменные или типизированные константы этого типа, например,
Var Z: Data;
X: Complex;
Const
Birthday:Data=(Year:1974;Month:7;Day:12);
Petrov:Person=(Name:’Иван’;Age:22;
Adres:’Новомосковск,Мира,20,3’);
Доступ к полям записи в программе осуществляется следующим способом:
Z.Year:=1969; {Z – селектор записи; Year – поле}.
Z.Month:=7; Z.Day:=13; X.Re: 0.8;
X.Im: 2.1; Z.Month:= Z.Day div 5+2;
Тип данных запись может иметь так называемую вариантную часть. Вариантная часть позволяет трактовать по-разному занимаемую полями одну и ту же память.
Type
Figure=(Square,Triangle,Circle);
G = Record
X,Y: integer;
Case fig: Figure of
Square: (Side: integer);
Triangle: (Side1,Side2,Angle: integer);
Circle: (Radius: integer);
end;
В данном случае задан перечисляемый тип для обозначения трёх геометрических фигур: квадрата, треугольника и окружности. Далее вводится объединение: X, Y – координаты привязки этих фигур на некоторой плоскости, Side (сторона) определяет квадрат, Side1, Side2, Angle (угол) определяют треугольник, Radius – окружность. Начиная с ключевого слова Case, записывается вариантная часть. Память выделяется одна. Трактовать её можно в данном случае так: в памяти находится или одна величина Side, или три величины Side1, Side2, Angle, или одна величина Radius. Когда и как трактовать память – выбирает программист.
Вариантная часть может быть только одна и располагаться в конце записи. Синтаксически Fig есть параметр выбора (указывать его необязательно). Чаще всего вариантную часть записывают так:
Case Figure of
Square: (Side: integer);
Triangle: (Side1,Side2,Angle: integer);
Circle: (Radius: integer);
Как замечено выше, память под вариантную часть выделяется одна и та же. В данном случае для Triangle требуется записать три величины типа integer, больше, чем для других фигур. Поэтому под вариантную часть будет выделено 12 байт памяти (по 4 байта на каждую величину).
Далее выберем две переменные и запишем данные в эти переменные:
Var MySquare: G; MyCircle: G;
. . . . . . . . . . . . . .
MySquare.Side:= 5; MyCircle.Radius: = 10;
Как можно заметить, отличий в записи информации в вариантные поля от обычных полей на этом уровне не существует. Если попытаться в примере выше прочитать значение MySquare.Side, то оно будет равно 10, так как последняя запись в общую память была именно такая (MyCircle.Radius: = 10;).