
- •В.В. Чуркин технологии программирования
- •Содержание
- •Введение
- •Указатели. Операции над указателями Операции адресации и разыменования.
- •Арифметические операции.
- •Присваивание указателей.
- •Смещение и индексирование указателей.
- •Функции
- •Объявление функции (прототип)
- •Параметры функции
- •Встроенные функции
- •Функции с параметрами со значениями по умолчанию
- •Параметры функции main()
- •Рекурсивные функции
- •Перегрузка функций
- •Шаблоны функций
- •Указатели на функции
- •Объявление и инициализация массива указателей на функции:
- •Указатель на функцию как возвращаемое функцией значение
- •Выделение и освобождение динамической памяти
- •Символьные и строковые данные Символьные константы
- •Строковые константы (строки)
- •Символьные переменные
- •Строки – переменные
- •Специальные функции ввода-вывода строк
- •Стандартная библиотека функций языка с
- •Файлы Потоковый ввод-вывод в языке с Функции верхнего уровня файлового ввода-вывода
- •Открытие и закрытие потока
- •Текстовый режим
- •Бинарный режим
- •Закрытие файла
- •Функции в языке c для работы с файлами
- •Двоичный (бинарный) режим обмена с файлами
- •Строковый обмен с файлами
- •Форматный обмен с файлами
- •Позиционирование в потоке
- •Ввод-вывод нижнего уровня
- •Открытие / закрытие файла
- •Чтение и запись данных
- •Произвольный доступ к файлу
- •Позиционирование файлов
- •Сортировки числовых массивов Принцип наименьших привилегий
- •Обменная сортировка (SwapSort)
- •Сортировка выбором (SelectSort)
- •Пузырьковая сортировка (BubbleSort)
- •Сортировка вставками (InsertSort)
- •Быстрая сортировка (QuickSort)
- •Поиск в числовых массивах
- •Структуры
- •Форматы определения структурных типов
- •Форматы определения объектов структурных типов
- •Операции над объектами структурного типа
- •Доступ к элементам объектов структурного типа
- •Структуры, массивы и указатели
- •Объединения (смеси)
- •Оператор switch (переключатель)
- •Динамические структуры данных
- •Реализация стека с помощью массива
- •Очередь
- •Очередь приоритетов
- •Реализация очереди с помощью массива
- •Линейные списки
- •Функции для работы с двунаправленным линейным списком
- •Реализация списка с помощью массивов
- •Поиск хэшированием
- •Бинарные деревья
- •Бинарное упорядоченное дерево (дерево поиска)
- •Идеально сбалансированное дерево
- •Операции с бинарным упорядоченным деревом
- •Удаление узла из дерева
- •Обход (просмотр) дерева
- •Реализация дерева с помощью массивов
- •Вывод динамических структур в файл и чтение их из файла
- •Сбалансированные (avl) деревья
- •Алгоритм avl-вставки.
- •Повороты
- •Классы и объектно-ориентированное программирование
- •Объявление класса
- •Определение класса (реализация класса)
- •Использование класса (драйвер класса)
- •Доступ к элементам класса
- •Отделение интерфейса от реализации
- •Обслуживающие функции-утилиты
- •Конструкторы
- •Windows-программы в Builder
- •Структура головного файла проекта
- •Структура заголовочного файла модуля формы (“Unit1.H”)
- •Структура файла реализации модуля формы (“Unit1.Cpp”)
- •Области видимости (или области действия) переменных в блоках. Время жизни переменных
- •Доступ к свойствам и функциям-элементам (методам) объектов, переменным и функциям в приложении, содержащем одну форму
- •Константные объекты и константные функции-элементы
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •Перегрузка операции индексирования []
- •Композиция классов
- •Дружественные функции класса
- •Дружественный класс
- •Использование указателя this
- •Статические элементы класса
- •Шаблон класса для статически и динамически создаваемых объектов
- •Конструктор 1
- •Деструктор
- •Вызовы конструкторов и деструкторов
- •Перегруженная операция присваивания
- •Конструктор 2 (конструктор копирования, конструктор копии)
- •Наследование. Иерархия классов.
- •Ключи доступа
- •Пример простого наследования (точка, круг)
- •Правила наследования функций-элементов. Вызовы конструкторов и деструкторов в иерархии
- •Виртуальные функции и полиморфизм
- •Правила определения и наследования виртуальных функций
- •Позднее (динамическое) связывание
- •Полиморфизм. Абстрактные и конкретные классы
- •Учебная литература (основная)
- •Учебная литература (для углубленного изучения)
- •Учебно-методические издания
Структура головного файла проекта
В нем находится головной модуль, содержащий функцию WinMain. Обычно головной модуль даже не просматривают. Пусть проект имеет одну форму, на которой размещены кнопка и метка.
//----------------------------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop //вызывает действия, запланированные авторами компилятора
USERES(“Projects1.res”); //макрос, подключающий файл ресурсов (пиктограммы)
USEFORM(“Unit1.cpp”,Form1); //макрос, подключающий файл формы
WINAPI WinMain(список параметров)
{ try //попытка
{ исполняемый код
(инициализация объектов-компонентов,
создание объектов-форм,
начинает выполнение программы)
}
catch (параметр) //поимка
{ код, исполняемый в случае ошибки
(обработка исключений – аварийных ситуаций;
по умолчанию здесь расположен стандартный
обработчик исключений)
}
return 0;
}
//----------------------------------------------------------------------------------------------
Директива #include <vcl.h> подключает заголовочный файл vcl.h, содержащий объявления, используемые в библиотеке визуальных компонентов.
Макросы USERES и USEFORM препроцессор развернет в соответствующий код.
После начала выполнения программа ждет соответствующих событий, которые и управляют её ходом.
Все операторы головного файла проекта заносятся в него автоматически в процессе проектирования приложения.
Структура заголовочного файла модуля формы (“Unit1.H”)
//----------------------------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//------------------
#include <…..> //директивы помещаются автоматически; они подключают
………………. //копии файлов, в которых описаны компоненты, переменные,
#include <…..> // константы, функции, используемые в данном модуле
//здесь пользователь может поместить свои директивы, например,
#include <math.h>
//----------------------------
//объявление класса формы TForm1
class TForm1:public TForm // TForm – базовый класс, порождает объект –
// пустую форму
{__published: //публикуемый - открытый файл, содержащий объявления
//размещенных на форме компонентов и обработчики событий
//в них; включается автоматически
TButton* Button1; //указатель на компонент кнопка
TLabel* Label1; //указатель на компонент метка
void __fastcall Button1Click(TObject* Sender); //объявление (прототип)
// обработчика события - щелчка на кнопке; Sender – указатель на компонент,
// который посылает сообщение обработчику (здесь Sender не нужен).
// Обработчик появляется автоматически после двойного щелчка на кпопке
// или после щелчка в Инспекторе объектов справа от имени события
private: //закрытый раздел класса
//в закрытый раздел пользователь может поместить объявления
//типов, переменных, функций, недоступных для других модулей
public: // открытый раздел класса
__fastcall TForm1(TComponent* Owner); //объявление конструктора формы
//Объявление конструктора формы включается автоматически.
//Пользователь может поместить здесь объявления типов, переменных, функций,
//доступных для других классов и модулей, но со ссылкой на объект
};
extern PACKAGE TForm1* Form1;
//Сюда можно поместить объявления типов, переменных, функций, которые не
//включаются в класс формы. Объявленные здесь переменные доступны в пределах
//данного модуля; будут доступны в других модулях, если определить их там
// через extern. Объявленные функции доступны в пределах данного модуля;
// будут доступны в других модулях, если там содержатся их прототипы.
#endif
//----------------------------------------------------------------------------------------------