{ //вычисление x в степени n многократным умножением
if (n==2) //предполагается, что чаще всего требуется x в квадрате
return x * x;
else // рекурсивный вызов sgr_of_power
return (x * sgr_of_power(x, n-1));
}
Библиотечные функции
При разработке программ широко применяются функции стандартных библиотек С++.
Каждая стандартая библиотека имеет соответствующий заголовочный файл, содержащий прототиы всех функций библиотеки и объявления различных типов данных и консант, которые используются этитми функциями. Примеры заголовочных файлов приведены в таблице 2.1.
Таблица 2.1 Примеры заголовочных файлов стандартных библиотек С++
| Заголовочный файл | Пояснение |
| < cmath > | Математические функции. |
| < cstdlib > | Функции для преобразования чисел в текст, текста в числа, генерации случайных чисел и другие функции. |
| < cstring > | Функции обработки строк (в стиле языка С). |
| < cctype > | Функции проверки на принадлежность символа множеству. |
| <с time > | Функции для работы с временем и датами |
Пример 2_5_1. Генерация случайных чисел
#include <cstdlib>
#include <iostream>
using std::endl;
using std::cout;
Int main()
{
for (int i =0; i <=20; ++ i)
cout<<(1 + rand()%6)<<endl; // генерация чисел в диапазоне от 1 до 6:
// rand() генерирует целое число в диапазоне
// от 0 до RAND_MAX(не менее 32767)
system("pause");
return 0;
}
Пример 2_5_2. Определение текущего времени
#include <ctime>
#include <iostream>
using std::endl;
using std::cout;
Int main()
{
time_t system_time = time(NULL); // здесь NULL – «нулевой» параметр
cout<<"System time: "<<ctime (&system_time)<<endl;
system("pause");
return 0;
}
Результат работы:
Перегрузка и шаблоны функций
Перегрузка функций обычно используется для создания нескольких функций с одинаковым именем, предназначенных для выполнения сходных задач, но с разными типами данных. При вызове перегруженной функции компилятор С++ определяет соответствующую функцию путем анализа количества, типов и порядка следования параметров в вызове.
Пример 2_6_1. Перегрузка функций расчета квадрата переменной
#include <iostream>
using std::endl;
using std::cout;
int square(int x){ return x * x;}
double square(double y){ return y * y;}
Int main()
{
cout<<" Квадрат целого числа 7 = " <<square(7) <<endl;
cout<<"Квадрат вещественного числа 7.5 = "<<square(7.5)<<endl;
system (" pause ");
return 0;
}
При вызове square (7) будет обращение к функции int square (int x) и вывод значения 49. Во втором вызове – обращение к функции double square (double y) и вывод значения 56.25.
Шаблон функции используется, если операции обработки данных перегруженных функций идентичны. Тогда вместо нескольких перегруженных функций можно применить единственный шаблон функции.
Пример 2_6_2. Шаблон функции расчета квадрата переменной
#include <iostream>
using std::endl;
using std::cout;
template <typename T> // определение шаблона функции
T square(T value){ return value * value;} // с параметром типа T
Int main()
{
cout<<" Квадрат целого числа 7 = " <<square(7) <<endl;
cout<<"Квадрат вещественного числа 7.5 = "<<square(7.5)<<endl;
system (" pause ");
return 0;
}
Когда компилятор обнаруживает вызов функции square в исходном тексте программы, тип данных переданный в функцию подставляется вместо типа T в определение шаблона, и компилятор создает функциию square для переданного типа данных. После этого заново созданная функция компилируется. Таким образом шаблон, в действительности, является средством генерации кода.
Задания для самостоятельной работы






