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

Создание собственных заголовочных файлов

Программист может сам создавать требующиеся ему заголовочные файлы с определением собственных функций.

Заголовочные файлы содержат объявления и определения, общие для различных программных файлов, и поэтому часто создаются и включаются в файлы программ директивой компилятора #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.

Контрольные вопросы

1. Назовите три условия, необходимые для использования функции.

2. Что такое прототип функции, для чего он нужен?

3. Чем отличается объявление функции от определения функции?

4. Когда целесообразно использовать статическую переменную внутри функции?

5. Назовите три способа передачи параметров в функцию. Опишите ситуации, когда следует использовать конкретный способ. Приведите примеры.

6. Что такое перегрузка функции, когда ее целесообразно использовать?

7. Назовите правила задания параметров функции по умолчанию.

8. Как и в каких случаях создаются пользовательские заголовочные файлы?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]