Создание собственных заголовочных файлов
Программист может сам создавать требующиеся ему заголовочные файлы с определением собственных функций.
Заголовочные файлы содержат объявления и определения, общие для различных программных файлов, и поэтому часто создаются и включаются в файлы программ директивой компилятора #include. В качестве таких объявлений и определений выступают классы, структуры, объединения, перечислимые типы и прототипы функций или их определения.
Директива #include используется для включения копии указанного в директиве файла в то месте, где находится эта директива. Чаще всего она применяется для включения в текст копии заголовочного файла.
Существуют три формы директивы.
#include <имя_заголовочного_файла>
#include "имя_заголовочного_файла"
#include идентификатор_макроса
Различие между первыми двумя формами директивы заключается в методе поиска препроцессором включаемого файла.
1. Если имя файла заключено в угловые скобки, то последовательность поиска препроцессором заданного файла в каталогах определяется заданными каталогами включения (include directories).
2. Если же имя файла заключено в кавычки, препроцессор ищет файл, просматривая каталоги в следующей последовательности:
-
каталог того файла, который содержит директиву #include;
-
текущий каталог;
-
каталоги, указанные опцией компилятора.
Если имя файла указано с путем, то препроцессор нигде больше этот файл не ищет.
3. Третья форма директивы предполагает наличие макроса, определяющего включаемый файл (в данной работе эта форма не рассматривается).
В качестве примера, иллюстрирующего вторую форму директивы #include, рассмотрим программу, где объявления пользовательских функций max3( ) и fakt() – вычисление факториала, вынесено в отдельно созданный заголовочный файл с именем u_head.h, а определения пользовательских функций max3( ) и fakt() – вычисление факториала, вынесено в отдельно созданный файл с именем u_head.cpp.
// Программа 4_7
// Создание пользовательского заголовочного файла u_head.cpp для
// определения функции max3() – поиска максимального из трех чисел
// и функции fakt() – расчет факториала аргумента
// Место объявления функций - пользовательский заголовочный файл
// u_head.h
// Место определения функций - пользовательский заголовочный файл
// u_head.cpp
// Вызов функции - по имени
// Возвращаемое значение – используется
// Метод передачи параметров в функцию - по значению
// Пользовательский заголовочный файл (u_head.h)
// Объявление функции max3()
double max3(double x, double y, double z);
// Объявление функции fakt()
int fakt(int x);
#include <iostream.h>
#include <conio.h>
#include "u_head.h" // Подключение пользовательского
// заголовочного файла u_head.h
// Полный путь указывать
// не обязательно (отсчет ведется с текущей директории bin)
using namespace std;
int main ()
{
clrscr();
double a, b, c;
int d;
cout << "\n ПОСЛЕДОВАТЕЛЬНО ВВЕДИТЕ ТРИ ЧИСЛА: a,b,c: " << endl;
cin >> a; cin >> b; cin >> c;
cout << "\n ВЫ ВВЕЛИ: a = " << a << "\t b = " << b << "\t c = " << c ;
cout << "\n ПОЭТОМУ max (a,b,c) = " << max3(a,b,c);
cout << "\n ВВЕДИТЕ ОДНО ЦЕЛОЕ ЧИСЛО: " << endl;
cin >> d;
cout << " \n ВЫ ВВЕЛИ ЧИСЛО " << d;
cout << "\n\n ВЫЧИСЛЕНИЕ ФАКТОРИАЛА ЧИСЛА: fakt(" << d
<< ") = " << fakt(d);
return 0;
}
// Пользовательский файл (u_head.cpp)
// Определение функции max3()
double max3(double x, double y, double z)
{
double max=x;
if (y > max)
max = y;
if (z > max)
max = z;
return max;
}
// Определение функции fakt()
int fakt(int x)
{
int f = 1;
for (int i=1; i<=x; i++)
f *= i; // или f = f * i;
return f;
}
Вариант результата работы программы:
4.2. Выполнения лабораторной работы
Порядок выполнения работы и методические указания к ее выполнению:
- создать заготовку консольного приложения, воспользоваться для этого мастером создания приложений Win32;
- наполнить полученную заготовку консольного приложения конкретным содержанием в соответствии с предложенным заданием;
- устранить все ошибки, возникшие на этапе компиляции исходного текста программы;
- выполнение программы осуществить в пошаговом режиме;
- вывести в окно предварительного просмотра значения всех промежуточных переменных;
- итоговый запуск исполняемого модуля выполнить из командной строки;
- с помощью динамической справки выяснить назначение всех служебных слов в программе;
- выполнить экспериментальную часть работы согласно полученного задания;
- оформить отчет и сдать преподавателю.
Задание 2.1 (по вариантам).
Используя механизм перегрузки функции, разработать и отладить программу вычисления значения y = f(x, y, z) для различных типов параметров. Конкретный вариант функции взять из задачи 2 ЛР№1. Предусмотреть задание параметров функции «по умолчанию» и с клавиатуры.
В качестве образцов использовать фрагменты программ 4_1, 4_5, 4_6.
Задание 2.2 (по вариантам).
Разработать и отладить программу вычисления выражения y = f(x), приведенного в приложении 1.
Каждой из трех ветвей вычисления значения у должна соответствовать отдельная функция (fun_1, fun_2 и fun_3). НА 12 БАЛЛОВ: Передача параметров в функцию fun_1 должна осуществляться по значению, в функцию fun_2 – используя указатели, а в функцию fun_3 – на базе ссылок.
В качестве образцов использовать фрагменты программ 4_3 и 4_4.
Задание 2.3 (по вариантам).
Аналогично заданию 2.2, однако все объявления и определения функций поместить в отдельный заголовочный файл с именем ***.h, а определения функций поместить в отдельный файл с именем ***.cpp.
В качестве образцов использовать фрагменты программ 4_3, 4_4 и 4_7.