Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР13-С++17-мая-2012.doc
Скачиваний:
13
Добавлен:
15.09.2019
Размер:
1.3 Mб
Скачать

1.17. Шаблоны функций

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

Пример 13.31

Использование шаблона функции

#include <iostream>

using namespace std;

template <class T>

T max(T a, T b, T c)

{ T m = a;

if (b > m) m = b;

if (c > m) m = c;

return c; }

int main()

{

int i1,i2,i3;

cout<<”enter int i1,i2,i3 ”;

cin>>i1>>i2>>i3;

cout<<”max=”<<max(i1,i2,i3);

double d1,d2,d3;

cout<<”\n enter double d1,d2,d3”;

cin>>d1>>d2>>d3;

cout<<”max=” <<max(d1,d2,d3)<<endl;

system("pause");

return 0;

}

1.18. Использования библиотеки этапа выполнения

Одно из преимуществ использования функций заключается в том, что вы можете часто применяемую функцию, созданную для одной программы, использовать в другой программе. Как вы уже знаете из предыдущих лабораторных работ, большинство компиляторов C++ обеспечивают широкий набор функций, использующихся в программах и называющихся библиотекой этапа выполнения. Применение этих функций значительно сокращает объем программирования, который вы должны выполнить самостоятельно. Вместо этого ваша программа просто вызывает функции библиотеки этапа выполнения. В зависимости от компилятора библиотека этапа выполнения может состоять из тысяч функций. В разделе описывается использование нескольких таких функций в ваших программах.

1.18.1. Использование функций библиотеки этапа выполнения

Из предыдущих разделов вы узнали, что до того, как ваши программы смогут вызвать функцию, компилятор C++ должен узнать определение или прототип функции. Поскольку функции библиотеки этапа выполнения не определены в вашей программе, вы должны указать прототип для каждой библиотечной функции, которую намерены использовать. Для упрощения использования библиотечных функций компилятор C++ предоставляет заголовочные файлы, содержащие корректные прототипы. Таким образом, вашим программам необходимо просто включить требуемый заголовочный файл с помощью оператора # include, а затем вызвать необходимую функцию. Например, следующая программа в примере 13.32 будет использовать функции библиотеки этапа выполнения t ime и ctime для вывода текущей системной даты и времени. Прототипы этих двух функций библиотеки этапа выполнения содержатся в заголовочном файле time.h:

Пример 13.32

#include <iostream.h>

#include <time.h> // Для функций библиотеки этапа выполнения

void main(void)

{

   time_t system_time;

  system_time = time(NULL);

   cout << "Текущее системное время " << ctime(&system_time) << endl;

}

Когда вы откомпилируете и запустите эту программу, на вашем экране появятся текущие системные дата и время:

Текущее системное время Mon May 14 16:13:51 2012

Как видите, программа использует функции time и ctime. В случае функции ctime программа передает адрес переменной system_time. Для использования этих функций вам просто следует включить заголовочный файл time.h в начало вашего исходного файла.

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

Пример 13.33

#include <iostream.h>

#include <math.h> // Содержит прототип sqrt

void main(void)

{

 cout << "квадратный корень 100.0 равен " << sqrt(100.0) << endl;

 cout << "Квадратный корень 10.0 равен " << sqrt (10.0) << endl;

 cout << "квадратный корень 5.0 равен " << sqrt(5.0) << endl;

}

Наконец, программа в примере 13.34 использует функцию system, прототип которой определяется в заголовочном файле stdlib.h. Функция system обеспечивает легкий способ выполнения вашей программой команды операционной системы, такой как "DIR", или другой программы:

Пример 13.34

#include <stdlib.h>

void main(void)

{

  system("DIR");

}

В этом случае программа использует функцию system для вызова команды MS-DOS DIR. Выберите время для эксперимента с этой программой, запуская другие команды или даже одну из программ, созданных вами ранее при изучении этой книги.