Программа на C++ чаще всего включает в себя
большое число исходных файлов, в каждом из которых
находятся описания типов, функций, переменных
и констант. Чтобы имя можно было применять в разных
исходных файлах для ссылки на определенный объект,
оно должно быть описано как внешнее. К примеру:
extern double sqrt(double);
extern instream cin;
Самый простой способ обеспечить согласованность
исходных файлов — помещение таких же описаний в отдельные файлы, которые называются заголовочными
(или хэдер) файлами, после чего включить, т. е. скопировать, эти заголовочные файлы во все файлы, где необхо-
димы эти описания. К примеру, если описание sqrt располагается в заголовочном файле для стандартных
математических функций math.h и необходимо извлечь
квадратный корень из 4, следует применить программу:
#include
--...
x = sqrt(4);
Так как обычные заголовочные файлы состоят из
большого числа исходных файлов, в них нет описаний,
которые не должны повторяться.
В команде включения include имя файла, которое
располагается в угловых скобках, например, относится
к файлу с таким именем в стандартном каталоге (обычно
это -usr-include-CC); на файлы, хранящиеся в других местах, ссылаются, применяя имена, расположенные в двойных кавычках. Например:
#include «math1.h»
#include «-usr-bs-math2.h»
включит math1.h из текущего пользовательского каталога, а math2.h из каталога -usr-bs.
Покажем, как мы могли бы определить тип потока
вывода ostream. Для упрощения задачи предположим,
что для буферизации определен тип streambuf. Тип
streambuf определен в том месте, где также располагается и настоящее определение ostream. Значение
типа, определяемого пользователем, специфицирует
данные, которые нужны для представления объекта
этого типа, и большое число операций для работы
с этими объектами. Определение состоит из двух
частей: закрытой (private) части, в которой находится
информация, используемая только его разработчиком, и открытой (public) части, являющейся интерфейсом типа с пользователем.