
- •1. Краткие теоретические сведения
- •1.1. Знакомство с функциями
- •1.2. Описание функции
- •1.3.1. Тело функции
- •1.3.2. Формальные параметры функции
- •1.3.3. Обращение к функции
- •1.3.4. Фактические параметры.
- •1.4. Формальные и фактические параметры функции
- •1.5. Описание и объявление функции. Прототип функции
- •1 Способ - Перед main().
- •2 Способ - После main ().
- •1.6. Передача параметров в функцию. Изменяемые значения параметров
- •1.6.1. Передача параметров
- •1.6.2. Передача параметров по значению
- •1.6.3. Передача параметров по ссылке
- •1.6.4. Передача параметров по указателю
- •1.7. Механизм обращения к функции и передача данных
- •1.8. Локальные и глобальные переменные. Время жизни и область действия (видимости) переменных
- •1.8.1. Представление об области видимости переменных
- •1.8.2. Объявление локальных переменных
- •1.8.3. О конфликте имен
- •1.8.4. Глобальные переменные
- •1.8.5. Если имена глобальных и локальных переменных конфликтуют
- •1.9. Принцип сокрытия данных внутри функции. Принцип локализации имен
- •1.10. Передача одномерных массивов как параметров функции
- •1.11. Передача многомерных массивов в функцию
- •1.12. Рекурсивные функции
- •1.13. Аргументы по умолчанию
- •1.14. Встраиваемые функции (inline)
- •1.15. Перегрузка функций
- •1.16. Указатель на функцию
- •1.17. Шаблоны функций
- •1.18. Использования библиотеки этапа выполнения
- •1.18.1. Использование функций библиотеки этапа выполнения
- •1.18.2. Изучение функций библиотеки этапа выполнения
- •1.18.3. Использование функций api
- •1.19. Изменение значений параметров функции
- •1.19.1. Почему функции обычно не могут изменить значения параметров
- •1.19.2. Изменение значения параметра
- •1.19.3. Использование ассемблерных листингов для лучшего понимания работы компилятора
- •1.20. Примеры решения задач с использованием механизма функций
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1. Функции пользователя-использование формул
- •2.4.1.1. Условие задания
- •2.4.1.2. Пример для варианта 30
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Функции пользователя при работе с массивами
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Функции пользователя при работе с массивами
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример для варианта 30
- •2.4.3.3. Программа
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Вычисление выражений с использованием функций
- •2.4.4.1. Условие задания
- •2.4.4.2. Пример для варианта 30
- •2.4.4.3. Программа
- •2.4.4.4. Тестирование
- •2.4.5. Задание 5. Вычисление интеграла методом трапеций
- •2.4.5.1. Условие задания
- •2.4.5.2. Пример для варианта 30
- •2.4.5.3. Программа
- •2.4.5.4. Тестирование
- •2.4.5.5. Типичные ошибки при выполнении работы
- •Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Знакомство с функциями 2
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. Выберите время для эксперимента с этой программой, запуская другие команды или даже одну из программ, созданных вами ранее при изучении этой книги.