Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Базовый курс. Ч.3. Основы алгоритмизации и про- граммирования в среде Visual C++ 2005.pdf
Скачиваний:
53
Добавлен:
05.02.2023
Размер:
3.81 Mб
Скачать

76

10. СОБСТВЕННАЯ БИБЛИОТЕКА ПРОГРАММИСТА

Созданные пользователем функции целесообразно объединить в отдельную собственную библиотеку программиста. Для этого создадим (в своей папке!) на диске специальную папку под названием SUBPROG. В ней и будем размещать заголовочные файлы, содержащие функции пользователя.

Всякий заголовочный файл оформляется директивами препроцессору:

#infdef имя_файла #define имя_файла

#endif

Это сочетание директив предотвращает повторные включения директив-компонентов. Имя_файла может быть любым, но не следует использовать его еще в каком-либо качестве в своих программах. Таким образом будет создан заголовочный файлимя_файла.h Такой файл содержит прототипы соответствующих функций, константы и т..п Кроме того, там могут содержаться директивы на включение в программу тех заголовочных файлов из библиотеки компилятора, использование которых неизбежно в любой задаче (ввод/вывод, математические и т.п.)

В отличие от встроенных в компилятор, собственные списки и функции включаются с указанием пути к файлу, в который они записаны, и в обычных двойных кавычках.

Будем каждую библиотечную функцию записывать в своем отдельном программном файле. Имя файла и имя записанной в него функции могут и различаться, но желательно, чтобы они совпадали. Расширения таких файлов – как и для любой программы С++ – .cpp.

10.1. Перегрузка функций

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

В библиотеке стандартных функций (см. Приложение 1) имеется три функции для определения абсолютной величины числа трех типов:

77

int abs(int) long labs(long)

double fabs(double)

Гораздо удобнее было бы вызывать одну функцию для выполнения всех вариантов.

Для осуществления перегрузки необходимо записать три варианта прототипа новой функции и три варианта описания функции в форме функции abs1. Теперь при вызове функции abs1 компилятор определит тип переменной и исполнит нужный вариант. Итак, перегруженная функция abs1 имеет вид:

int abs1(int); double abs1(double); long abs1(long);

int abs1(int i);

{ return abs(i); }

double abs1(double a); { return fabs(a); }

long abs1(long i);

{return labs(i); }

Апрограмма с ее использованием будет выглядеть примерно

так:

#include <iostream> #include <math.h> using namespace std;

int x=-7;double z=-1.56789e2; long y=-33156; int abs1(int);

double abs1(double); long abs1(long); main()

{cout<<"\n"<<abs1(x)<<"\n"<<abs1(y)<<"\n"<<abs1(z); cout<<”\n”; return (0); }

int abs1(int x)

{return abs(x); } double abs1(double z)

{return fabs(z); } long abs1(long y)

{return labs(y); }

Когда запустим на исполнение, то получим (рис. 8.25):