1.9. Функции
Минимальная программа на С++ состоит из одной функции main, именно с нее
начинается работа программы. Однако, мы можно (и нужно) пользоваться другими
функциями. В языке С++ существует большое количество функций стандартной
библиотеки STL ( глава 2), а также можно определять свои собственные функции.
1.9.1 Использование функций библиотеки STL (пример 11)
Стандартная библиотека C++ предлагает широкий набор функций для выполнения
математических вычислений, операций со строками и символами, ввода-вывода,
обработки ошибок и многих других полезных операций. Это облегчает работу
программистов, поскольку эти функции реализуют многое из того, что им обычно
требуется. Прототипы функций размещаются в заголовочных файлах, так что они
могут использоваться любыми программами, включающими соответствующий заголовочный
файл.
Например, в языке С++ не существует оператора возведения в степень, но зато
есть функция возведения в степень, которой можно воспользоваться. Для этого
нужно подключить заголовочный файл <cmath> и в
обратиться к функции pow() в теле программы.
/////////////////////////////////////////////////////////////////////////////
// Прикладное программирование
// Пример 11. Обращение к фукнции возведения числа в степень
//
// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение математической библиотеки
#include <cmath>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
double pi=3.14;
// возведение числа в степень
// обращение к функции - пример 1
double power = pow(3.14, 2);
// обращение к функции - пример 1
power = pow(pi, 2);
// обращение к функции - пример 3
cout<<pow(pi, 2)<<endl;
}
/////////////////////////////////////////////////////////////////////////////
Функция pow() возводит число 3.14 в
квадрат и присваивает полученный результат переменной power, где pow -
имя функции; числа 3.14 и 2 — аргументы функции. В качестве аргументов функции
может быть число или переменная соответствующего типа.
Аргументы перечисляются в скобках после имени функции, если аргументов несколько,
то они отделяются друг от друга запятыми.
1.9.2 Определение новых функций
Определение (реализация) функции
Определение функции осуществляется следующим образом:
в общем виде
|
пример
|
тип имя(список аргументов с типами)
{
инструкции
return возвращ.знач.;
}
|
double plus(double x, double y)
{
return x+y;
}
|
Тип возвращаемого значения может быть целым, вещественным, и т.д., кроме
того, функция может не возвращать никакого значения, тогда при ее определении
(и описании) указывают тип void.
void print_value(double res)
{
cout<<"result is: "<<res<<endl;
}
Во время выполнения какой-либо функции управление возвращается в вызывающую
программу, когда программа достигает закрывающей фигурной скобки или при
исполнении оператора return. Если функция не возвращает никакого значения,
оператор return должен быть "пустым", а если возвращает – после
оператора return указывается возвращаемое значение. Для функции, не возвращающей
никакого значения, наличие оператора return не является обязательным.
Описание функции (прототип)
Обычно функции снабжаются прототипами, которые помещаются в отдельный заголовочный
(header) файл или в начале файла. Прототипом называется объявление функции:
в общем виде
|
пример
|
возвращ.тип имя (список аргументов с типами);
|
double plus(double x, double y)
|
Компилятор сверяется с прототипом функции, чтобы проверить, содержат ли
вызовы функции правильное число аргументов нужных типов и перечислены ли
типы аргументов в правильном порядке. Кроме того, прототип функции необходим
компилятору для того, чтобы убедиться, что возвращаемое функцией значение
корректно используется в вызвавшем функцию выражении (например, вызов функции,
возвращающий void, не может входить в правую часть оператора присваивания).
Каждый аргумент должен быть совместим с типом соответствующего параметра.
Например, параметр типа double может принимать значения 7.35, 22 или -0.03456,
но не строку вроде "hello". Если передаваемые функции аргументы
не совпадают по типу с параметрами, указанными в прототипе функции, компилятор
пытается преобразовать аргументы к соответствующему типу.
Обращение к функции (вызов функции)
Каждому параметру в определении функции (формальный параметр функции)
должен соответствовать один аргумент в вызове функции. В данном примере,
когда функция вызывается, параметр функции х инициализируется значением аргумента
b, параметр у инициализируется значением аргумента c, а возвращаемое значение
присваивается переменной a.
в общем виде
|
пример
|
имя (список аргументов);
|
double a, b, c;
a=plus(b, c);
|
1.9.3 Пример функции (пример 12)
В примере используются две функции – функция сложения двух чисел и функция
печати числа на экран. Значение функции plus можно присвоить какой-то переменной,
или использовать прямо при вызове другой функции или при использовании оператора
cout.
/////////////////////////////////////////////////////////////////////////////
// Прикладное программирование
// Пример 12. Функция сложения двух чисел
//
// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
// объявление функции (прототип функции)
// функция складывает два числа
double plus(double x, double y);
// функция печати результата
void print_value(double res);
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы
void main()
{
// объявление и инициализация двух переменных
double x1=1, x2=2;
// обращение к функции - пример 1
double res = plus(x1, x2);
// обращение к функции - пример 2
res = plus(55.5, res);
print_value(res);
// обращение к функции - пример 3
cout<<plus(res, x2)<<endl;
// обращение к функции - пример 4
print_value(plus(res, x2));
}
/////////////////////////////////////////////////////////////////////////////
// Определение (реализация) функции сложения двух чисел
double plus(double x, double y)
{
return x+y;
}
/////////////////////////////////////////////////////////////////////////////
// Определение (реализация) функции печати результата
void print_value(double res)
{
cout<<"result is: "<<res<<endl;
}
/////////////////////////////////////////////////////////////////////////////
|