Прежде чем перейти к изучению функций я хотел бы дать несколько определений функций, которые я взял с нескольких интернет ресурсов…
- Функция – это именованная часть программы, к которой можно обращаться из других частей программы столько раз, сколько потребуется.
- Функция (в программировании) — это фрагмент кода или алгоритм, реализованный на каком-то языке программирования, с целью выполнения определённой последовательности операций.
- Функции используются для того, чтобы организовать программу в виде совокупности небольших и не зависящих друг от друга частей.
- Функции это модули в С/С++.
- Функции — одна из самых важных компонентов языка C++.
- Функция - это самостоятельный элемент кода программы, иными словами фрагмент или кусок кода программы (как вам удобнее, так и называйте - не в этом суть), который выполняет свою отдельную небольшую задачу.
Лично мне больше нравятся два последних определения. Прежде чем перейти непосредственно к изучению функций, я как всегда хочу привести пример из реальной жизни. Больше всего функция похожа на артиста, который наряду с другими артистами принимает участие в каком-нибудь концерте.
Кроме артистов, которые принимают участие в концерте, есть артист, который ведет концерт. Его называют ведущий или конферансье. Обычно конферансье начинает концерт, и он же его заканчивает, объявляя (вызывая) артистов на сцену. В любой программе на С++ есть свой конферансье. Это функция main(), что в переводе с английского означает «главная». Вот как она выглядит:
int main()
{
return 0;
}
Без нее программа на С++ не скомпилируется, а значит и исполняемый файл не будет создан. Именно с нее начинается выполнение программы, и ей же она закончится. Еще ее называют точкой входа. Теперь давайте вызовем из функции main( ) другую функцию. Например, get_message( ):
#include <iostream>
#include <windows.h>
using namespace std;
void get_message();
int main()
{
get_message();
cout << "\n\n";
system("PAUSE");
return 0;
}
void get_message()
{
char str[] = "Наше сообщение...";
cout << str << "\n\n";
}
Теперь на примере этой программы я объясню, что такое прототип функции, вызов и реализация. А также что такое возвращаемое значение и аргументы функции.
И так начнем с прототипа. В нашем случае это следующая строчка:
void get_message();
Функция это своеобразная программа внутри программы. Подпрограмма еще одно название функции. Она вызывается из другой функции. Для этого достаточно написать название функции с круглыми скобками и точкой с запятой после них. В нашей программе это строчка:
get_message();
Из вызывающей ее функции ей могут быть переданы данные, с которыми функция работает. Например, вот как будет выглядеть вызов функции, перемножающей два числа (я решил назвать ее multiply(), что в переводе с английского означает «умножить»):
multiply(num1, num2);
Для того чтоб функция могла перемножить два числа, в круглых скобках указываем, какие переменные (их еще называют аргументами функции) мы передаем функции multiply(). Важно помнить, что в этот момент не происходит подстановка кода функции multiply() в код функции main().
В этот момент функция multiply() берет управление программой на себя. После того, как функция multiply() перемножит два числа, она должна передать результат обратно в функцию, из которой она была вызвана, т. е. вернуть какое-то значение обратно. Делается это при помощи инструкции:
return sum;
После этого функция завершает свою работу и передает управление программой вызвавшей ее функции.
А теперь давайте представим, что произойдет, если мы передадим функции переменные не того типа, или не полностью? Или вернем значение не того типа? В первом случае функция не сможет взять управление на себя, во втором данные будут испорчены или потеряны. Чтобы этого не случилось и нужен прототип функции, если сам код функции не предшествует ее первому вызову. Вот как будет выглядеть прототип функции multiply():
int multiply(int num1, int num2);
Здесь перед названием функции стоит тип возвращаемого значения. В нашем случае int. А в круглых скобках мы записываем имена переменных с указанием их типов, которые мы хотим передать нашей функции. Точно так же, как и при объявлении переменных. Прототип функции должен быть записан до ее первого вызова. Т. к. наши функции вызываются в функции main(), то прототип должен быть перед функций main(). Единственной функцией, которая не нуждается в прототипе – функция main(), т. к. она встроена в язык С++.
Теперь перейдем к коду самой функции. Его еще называют реализацией. Для этого достаточно написать прототип функции, только вместо точки с запятой пару фигурных скобок. Между ними мы записываем код, который будет выполняться при вызове функции. Переменные, которые располагаются между круглыми скобками, называются параметрами. В них будут записаны значения переменных передаваемых функции. Единственное, что у них должны совпадать это тип, и порядок следования переменных. Например, если первая переменная прототипа (первый аргумент функции) будет иметь тип int, а вторая тип char, то первый параметр должен быть типа int, а второй типа char.
А что делать, если мы не передаем функции, которую мы вызываем никаких данных, и никаких данных не передаем в функцию, из которой мы ее вызвали? Для этого достаточно оставить скобки пустыми, а перед названием функции поставить слово void, что мы и сделали, написав следующий прототип:
void get_message();
Теперь, чтоб закрепить материал напишем программу, которая умножает два числа введенных с клавиатуру, и выводит результат умножения на экран:
#include <iostream>
#include <windows.h>
using namespace std;
int multiply(int num1, int num2);
int main()
{
int num1, num2, sum;
cout << "Введите первое число: \n\n";
cin >> num1;
cout << "\n";
cout << "Введите второе число: \n\n";
cin >> num2;
cout << "\n";
sum = multiply(num1, num2);
cout << "Произведение чисел " << num1
<< " и " << num2 << " равно "
<< sum << ".";
cout << "\n\n";
system("PAUSE");
return 0;
}
int multiply(int x, int y)
{
int total;
total = x * y;
return total;
}
Обратите на следующую строку в функции main():
sum = multiply(num1, num2);
В ней мы присвоили переменной sum результат работы функции multiply(). В следующем уроке мы продолжим изучение функций. В нем я расскажу, как передавать функции различные типы данных.