Функции в C++: руководство для начинающих
Привет, дорогой читатель! Вам, наверное, приходилось в программе использовать один и тот же блок кода несколько раз. Например, выводить на экран одну и ту же строчку. Для того, чтобы каждый раз не писать одинаковый блок кода в C++, присутствуют функции.
Сегодня мы разберем, что такое функции и как правильно их использовать в своей программе. Поехали!
Что такое функции
Функции - это блок кода, который вы можете использовать в любом участке вашей программы неограниченное количество раз. Например, в программе ниже мы выводим 2 строки (без применения функций):
#include <iostream>
using namespace std;
int main() {
cout << "Функция очень хороший инструмент в программировании";
cout << "С помощью его можно улучшить свой уровень программирования";
system ("pause")
return 0;
}
А вот если бы мы использовали функции, то у нас получилось бы так:
#include <iostream>
using namespace std;
void func () { // функция
cout << "Функция очень хороший инструмент в программировании";
cout << "С помощью его можно улучшить свой уровень программирования";
}
int main() {
func(); // вызов функции
system ("pause")
return 0;
}
Мы хотим, чтобы вы обратили внимание на увеличение количества строк в первой программе при выводе этих двух строк 5 раз.
Как видите, если правильно применять функции, то можно уменьшить программу в несколько раз. Но вы должны помнить - бессмысленно использовать функции без видимых оснований (например, если логика внутри функции слишком специфична).
Вашему компилятору будет совершенно без разницы, использовали вы функции или несколько раз вставили одинаковый блок кода, в итоге он выведет одинаковый результат.
Чтобы понять, как работают локальные переменные (например, переменные в функциях) и глобальные переменные, можете почитать данную статью.
Как создать функции в C++
Таким образом, чтобы создать функции, нужно использовать конструкцию, которая находится пониже:
<тип данных, который будет возвращаться функцией> <имя> (<аргументы функции>) {
< блок
кода >
}
Давайте разберем эту конструкцию:
- Тип данных функции. В самом начале нам нужно указать тип данных, который в конечном итоге будет передавать функция.
Но если мы не собираемся ничего передавать, а например, хотим просто вывести строку, то на месте <тип данных>
можно указать тип void
. Также вы можете указать тип int,
это ни на что не повлияет.
void stroka() {
cout << "Выводим строку без всяких переменных";
}
- Имя функции. Нам нужно задать функции имя (исключениями являются зарезервированные слова в C++, имена начинающиеся с цифр, а также имена разделенные пробелом).
Лучше всего задавать такое имя, которое будет говорить вам в будущем, за что отвечает эта функция. И тогда в будущем вам не придется вспоминать, за что она отвечает.
- Аргументы функции. В скобках (после имени функции) могут находиться аргументы функции. Аргумент функции - это значение, которое можно передать функции при ее вызове. Если аргумент функции не один, а их несколько, то их нужно разделять запятой.
int sum(int b, int c) { // у нас аргументы функции это b и c
Если аргументов в функции нет, то в скобках можно указать тип void
. Но писать его необязательно, он стоит по умолчанию.
void stroka(void) {
cout << "Просто выводим строку";
}
- Блок кода. После открывающей скобки идет блок кода, который будет начина ть работать при вызове функции.
Также, если мы хотим вернуть какое-то значение из функции или вообще прекратить ее работу, то вам понадобится использовать оператор return
.
int sum(int b, int c) { // у нас аргументы функции это b и c
return a + b; // он возвращает a + b
}
Если вы не знали
main()
- это тоже функция.
Как вызывать функцию
Для вызова функций вам нужно использовать такую конструкцию:
<имя функции> (<аргументы, если они есть>);
Например, выше для вызова функции stroka()
(эта функция находится выше) нам нужно использовать такую конструкцию:
stroka();
Как видите, мы не вписывали аргументы в круглые скобки, так как мы их не указали при создании функции.
Зачем использовать функции
Практически вс е программисты на текущее время постоянно используют функции, поскольку это экономит их время и позволяет более интенсивно работать. Особенно хорошо отзываются те программисты, которые уже работали над большими проектами, имеющими тысячи строк кода за собой.
Дело в том, что, если вы не используете функции, то программа становится менее мобильной. Например, конкретная ситуация. Вы работаете над проектом и уже написали несколько тысяч строк кода, затем решили изменить вывод сообщения с “Привет!” на “Привет дорогой читатель!“. Для этого вам придется найти все строки, в которых происходит вывод сообщения и изменить их все.
А если бы вы использовали функцию, которая выводила сообщение “Привет!”, то тогда бы вам пришлось только найти эту функцию и изменить ее!
Перегрузка функций
В C++ вы можете создавать функции с одинаковыми именами. Вы наверно удивлены, что такое вообще возможно так, как если у нас будет 3 функции с одинаковыми именами и мы захотим вызвать одну из этих функций, то мы таким образом вызовем все 3 функции и получится полная каша. Но компилятор думает про это совершенно по-другому.
Все дело в том, что у каждой функции есть свое полное имя (или по-другому сигнатура). Параметры функции - это вся информация о функции. В эту информацию входят:
- Имя функции.
- Число аргументов функции.
- Типы аргументов.
Именно поэтому компилятор считает функции с одинаковыми именами разными, если сигнатуры соответственно тоже разные.
Перегрузка функций - это создание функций с одинаковыми именами, но с разными сигнатурами (полными именами).
В примере ниже все функции разные, хотя и имена у них одинаковые:
int func(int a) {
// выполнение функции номер 1
}
double func() {
// выполнение функции номер 2
}
int func(double b, double h) {
// выполнение функции номер 3
}
long long func(int n, int c, int g) {
// выполнение функции номер 4
}
Распространенной ошибкой является мнение, что тип возвращаемого значения функции входит в полное имя функции.
В примере ниже три функции имеют одинаковые типы возвращаемого значения (но полные имена у них совершенно идентичны), и поэтому компилятор начнет ругаться на нас (почему мы создали одинаковые функции!).
int func() {
}
double func() {
//ошибка: функция с таким именем уже существует
}
long long func() {
//ошибка: функция с таким именем уже существует
}
Прототипы функций
В C++ вы не можете вызвать функцию до объявления самой функции. Все потому, что компилятор не будет знать полное имя функции (имя функции, число аргументов, типы аргументов). Таким образом в примере ниже компилятор сообщит нам об ошибке:
int main() {
Sum_numbers(1, 2);
return 0;
}
int Sum_numbers(int a, int b) {
cout << a + b;
}
Так, при вызове функции Sum_numbers()
внутри функции main()
компилятор не знает ее полное имя.
Конечно компилятор C++ мог просмотреть весь код и определить полное имя функции, но этого он делать не умеет и нам приходится с этим считаться.
Поэтому мы обязаны проинформировать компилятор о полном имени функции. Для этого мы будем использовать прототип функции.
Прототип функции - это функция, в которой отсутствует блок кода (тело функции). В прототипе функции находятся:
- Полное имя функции.
- Тип возвращаемого значения функции.
Вот как правильно должна была выглядеть программа написанная выше:
int Sum_numbers(int a, int b); // прототип функции
int main() {
Sum_numbers(1, 2);
return 0;
}
int Sum_numbers(int a, int b) { // сама функция
cout << a + b;
}
Так, с помощью прототипа мы объясняем компилятору, что полным именем функции является Sum_numbers(int a, int b),
и кроме этого мы говорим компилятору о типе возвращаемого значения, у нас им является тип int
.
Плюсы использования функций
Давайте попробуем сформулировать плюсы использования функций у себя в программе:
- Можно изменить только тело функции и при этом не понадобится искать ее вызов и изменять его, в отличии от использования кода без функций.
- Большое уменьшение количества написания кода.
Лично мы считаем, что использования функций пойдет вам только во благо. Советуем вам начинать использовать функции с начала обучения программированию.
Закрепление функций
Для того чтобы вы, наши дорогие читатели, смогли закрепить данный материал, создайте функцию для подсчета суммы трех чисел. Вызовите эту функцию для вот этих аргументов: 5, 9, 10.
Надеемся, вам понравилась данная статья. Нам будет приятно, если вы поделитесь данным уроком со своими друзьями. Если вам что-то не понятно в данной статье, ниже вы можете оставить свой комментарий. Удачи!
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение