
- •В.В. Чуркин технологии программирования
- •Содержание
- •Введение
- •Указатели. Операции над указателями Операции адресации и разыменования.
- •Арифметические операции.
- •Присваивание указателей.
- •Смещение и индексирование указателей.
- •Функции
- •Объявление функции (прототип)
- •Параметры функции
- •Встроенные функции
- •Функции с параметрами со значениями по умолчанию
- •Параметры функции main()
- •Рекурсивные функции
- •Перегрузка функций
- •Шаблоны функций
- •Указатели на функции
- •Объявление и инициализация массива указателей на функции:
- •Указатель на функцию как возвращаемое функцией значение
- •Выделение и освобождение динамической памяти
- •Символьные и строковые данные Символьные константы
- •Строковые константы (строки)
- •Символьные переменные
- •Строки – переменные
- •Специальные функции ввода-вывода строк
- •Стандартная библиотека функций языка с
- •Файлы Потоковый ввод-вывод в языке с Функции верхнего уровня файлового ввода-вывода
- •Открытие и закрытие потока
- •Текстовый режим
- •Бинарный режим
- •Закрытие файла
- •Функции в языке c для работы с файлами
- •Двоичный (бинарный) режим обмена с файлами
- •Строковый обмен с файлами
- •Форматный обмен с файлами
- •Позиционирование в потоке
- •Ввод-вывод нижнего уровня
- •Открытие / закрытие файла
- •Чтение и запись данных
- •Произвольный доступ к файлу
- •Позиционирование файлов
- •Сортировки числовых массивов Принцип наименьших привилегий
- •Обменная сортировка (SwapSort)
- •Сортировка выбором (SelectSort)
- •Пузырьковая сортировка (BubbleSort)
- •Сортировка вставками (InsertSort)
- •Быстрая сортировка (QuickSort)
- •Поиск в числовых массивах
- •Структуры
- •Форматы определения структурных типов
- •Форматы определения объектов структурных типов
- •Операции над объектами структурного типа
- •Доступ к элементам объектов структурного типа
- •Структуры, массивы и указатели
- •Объединения (смеси)
- •Оператор switch (переключатель)
- •Динамические структуры данных
- •Реализация стека с помощью массива
- •Очередь
- •Очередь приоритетов
- •Реализация очереди с помощью массива
- •Линейные списки
- •Функции для работы с двунаправленным линейным списком
- •Реализация списка с помощью массивов
- •Поиск хэшированием
- •Бинарные деревья
- •Бинарное упорядоченное дерево (дерево поиска)
- •Идеально сбалансированное дерево
- •Операции с бинарным упорядоченным деревом
- •Удаление узла из дерева
- •Обход (просмотр) дерева
- •Реализация дерева с помощью массивов
- •Вывод динамических структур в файл и чтение их из файла
- •Сбалансированные (avl) деревья
- •Алгоритм avl-вставки.
- •Повороты
- •Классы и объектно-ориентированное программирование
- •Объявление класса
- •Определение класса (реализация класса)
- •Использование класса (драйвер класса)
- •Доступ к элементам класса
- •Отделение интерфейса от реализации
- •Обслуживающие функции-утилиты
- •Конструкторы
- •Windows-программы в Builder
- •Структура головного файла проекта
- •Структура заголовочного файла модуля формы (“Unit1.H”)
- •Структура файла реализации модуля формы (“Unit1.Cpp”)
- •Области видимости (или области действия) переменных в блоках. Время жизни переменных
- •Доступ к свойствам и функциям-элементам (методам) объектов, переменным и функциям в приложении, содержащем одну форму
- •Константные объекты и константные функции-элементы
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •Перегрузка операции индексирования []
- •Композиция классов
- •Дружественные функции класса
- •Дружественный класс
- •Использование указателя this
- •Статические элементы класса
- •Шаблон класса для статически и динамически создаваемых объектов
- •Конструктор 1
- •Деструктор
- •Вызовы конструкторов и деструкторов
- •Перегруженная операция присваивания
- •Конструктор 2 (конструктор копирования, конструктор копии)
- •Наследование. Иерархия классов.
- •Ключи доступа
- •Пример простого наследования (точка, круг)
- •Правила наследования функций-элементов. Вызовы конструкторов и деструкторов в иерархии
- •Виртуальные функции и полиморфизм
- •Правила определения и наследования виртуальных функций
- •Позднее (динамическое) связывание
- •Полиморфизм. Абстрактные и конкретные классы
- •Учебная литература (основная)
- •Учебная литература (для углубленного изучения)
- •Учебно-методические издания
Форматы определения объектов структурных типов
1) имя_структурного_типа список_объектов;
2) struct имя_структурного_типа
{определения элементов} список_объектов;
3) struct {определения элементов} список_объектов;
Память, выделяемая под объекты структурного типа
struct st{ типы int float ch
int i; |_|_|_|_|_|_|_|
float f; байты 2 4 1
char ch; объекты i f ch
} s;
В общем случае между полями структуры имеются промежутки. Поэтому объем памяти, выделяемой под объекты (переменные) структурного типа, определяют следующим образом:
sizeof(имя_структурного_типа); //можно без скобок
sizeof(имя_объекта_структурного_типа); //можно без скобок
Операции над объектами структурного типа
1) инициализация: complex z = {-3.1, 5.2};
2) присваивание однотипных структур:
complex z, p;
………….
z=p;
…….
3) операции сравнения – только поэлементно.
Доступ к элементам объектов структурного типа
Используются уточненные имена.
1) С использованием операции «точка»: имя_объекта.имя_элемента. Например: goods tea; tea.price = ……;
2) С использованием операции «стрелка»:
указатель_на_объект->имя_элемента.
Например: goods* tovar; tovar->name, или (*tovar).name.
Структуры, массивы и указатели
1)В качестве элементов структур можно использовать массивы:
struct {
double mas;
float coord[3];
} point = {12.3, {-1.0, 2.2, -4.3}};
Доступ к координате x: point.coord[o].
2)В качестве элементов структур можно использовать ранее определенные структуры:
struct date{int d, m, y;}
struct goods{
…………
date data;
} tea;
Доступ – по уточненному имени – tea.data.y;
3)Данные могут быть представлены в виде массива структур:
complex set[80] = {{., .},{. , .}, ………., {., .}};//массив из 80 структур
4)Указатели на структуры, ссылки, массивы:
struct {……} point, &pp=point, *pptr=&point, point1[30];
Можно pptr=point1; Тогда с помощью pptr++, pptr-- можно перемещаться по массиву структур с помощью указателя. Для перемещения по массиву структур можно также использовать индексирование указателя: pptr[i].
5)Компонентами (элементами) структур могут быть данные любых ранее определенных типов, за исключением структур, здесь определяемых. Но в качестве элемента структуры может быть указатель на определяемый структурный тип:
struct stud{
int nz;
char f[10];
stud* uk; };
Объединения (смеси)
Этот тип предназначен для хранения значений различных переменных одинаковых или разных типов на одном и том же участке ОП. Использование типа-объединение целесообразно, когда переменные используются поочередно.
union sm{ Размещение смеси в ОП
int i; |__|__|__|__|
float f; |ch|
char ch; | int |
} u; | f |
Доступ: u.f.
Объединения часто используют в составе структур:
struct st {
char ch[5];
int i;
union {
int a;
float b;
char c[7];
} uv;
} dat;
Доступ: dat.uv.c[2]. Допустимые операции – как над структурами.
Тип-перечисление
Есть две формы объявления переменных типа-перечисление.
1)enum {список_значений типа} имя_переменной;
2) enum имя_типа_перечисление {список_значений типа};
имя_типа_перечисление имя_переменной;
Примеры.
1)enum {kr, gel, zel} svetofor;
2)enum typsvet { kr, gel, zel};
typesvet svetofor;
Последовательность перечисленных констант автоматически нумеруется от 0 до 255. Но можно:
enum typsvet { kr=1, gel, zel}; //будет gel=2, zel=3
enum typsvet { kr=5, gel=10, zel=20};
Допустимые операции над данными типа-перечисление.
1)Переменной типа-перечисление можно присвоить значение константы того же типа: svetofor = gel;
2)Разрешены операции сравнения и операции проверки на равенство и неравенство.
3)Можно использовать в качестве меток оператора switch.
4)Можно использовать в качестве индексов элементов массива.
5)Можно использовать в качестве значений целого типа.