Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тех прог.doc
Скачиваний:
38
Добавлен:
14.11.2019
Размер:
3.59 Mб
Скачать

16.3.Заголовочные файлы

При написании программы 51 нужно было заботиться об объявлениях внешних функций и переменных в файлах программы. Для облегчения этого, принято размещать необходимые объявления в отдельных файлах с расширениями .h, которые называют заголовочными (от header – заголовок), так как их основное содержание составляют объявления или заголовки функций.

Страж включения

Заголовочные файлы вставляются в другие файлы директивами препроцессора #include, причем делать это надо однократно, так как при повторном включении возможны ошибки из-за дублирования определения какого-либо объекта. Чтобы не было повторного включения заголовочных файлов, используется прием, называемый стражем включения.

Заголовочный файл оформляется в виде

// Файл HEADER.H

#ifndef HEADERH // Страж

#define HEADERH // включения

// Содержимое HEADER.H

// …

#endif

Условная директива препроцессора #ifndef проверяет, определен или нет макрос HEADERH. Если этот макрос не определен, то в текст программы включаются все строки, вплоть до строки #endif, при этом определяется макрос HEADERH. Если же обнаружится, что макрос HEADERH определен, то в обработанный препроцессором текст не включаются все строки, расположенные между строками

#ifndef HEADERH

и

#endif

благодаря чему не будет повторного включения файла HEADER.H.

Имя макроса, который фигурирует в страже включения, совершенно произвольно, но принято выбирать его похожим на имя заголовочного файла.

Таким образом, если в некотором файле будут две директивы:

// Файл File1.cpp

#include HEADER.H

#include HEADER.H

то файл HEADER.H будет вставлен только одной первой директивой, а вторая будет фактически проигнорирована благодаря стражу включения.

Понятие стека

Стеком называется набор элементов одного типа, организованный по принципу “последний пришел – первый вышел” или LIFO (last in- first out). Английское слово stack переводится как копна сена, стопа бумаги. Для стопы бумаги действительно легче всего взять верхний лист, который попадает в стопу последним. Место, куда помещаются и из которого извлекаются элементы стека, называется вершиной.

Для работы со стеком определяют два основных действия или операции:

push –  поместить новый элемент в стек и

pop –  извлечь последний элемент, помещенный в стек.

Для наглядности стек можно представлять себе как вертикальную стопку книг или кирпичей, положенных друг на друга. Очередной кирпич кладется на верх стопки, извлекается же из стопки проще всего самый верхний кирпич. Таким образом, LIFO – это естественная дисциплина работы со стопкой кирпичей. В программировании стеки часто бывают полезны для решения различных задач.

Реализовать стек можно различными способами. В приводимой далее программе элементы стека размещаются в массиве.

Модули

Объявления функций для работы со стеком поместим в заголовочном файле Stack.h, определения функций и переменных поместим в файл реализации Stack.cpp. Совокупность заголовочного файла и файла реализации принято называть модулем. В C++ Builder для этого используется термин unit. В C++Builder создание модулей автоматизировано: заготовка нового модуля добавляется в проект командой File, New, Unit, при этом заголовочный файл модуля будет иметь страж включения. В TC заголовочный файл и файл реализации создаются по отдельности.