Часто разработчикам нужно передавать информацию в вызываемую функцию, чтобы у нее были данные для работы. Например, если мы хотим создать функцию для сложения двух чисел, нам нужно указать этой функции, какие именно числа следует складывать при вызове. В противном случае функция не будет знать, какие значения использовать.
Для этой цели используются параметры и аргументы функции, которые мы изучим в этом уроке.
Параметр функции — это переменная, которая используется внутри функции. Параметры функции работают аналогично переменным, определенным внутри функции. Но у них есть одно отличие — параметры всегда инициализируются значениями, предоставленными при вызове функции.
Параметры функции определяются в объявлении функции — они указываются в скобках после имени функции. При этом несколько параметров разделяются запятыми.
Посмотрим на код:
#include <iostream>
#include <string>
std::string GetFullName(std::string first_name, std::string last_name) {
return first_name + " " + last_name;
}
int main() {
std::string result { GetFullName("John", "Wik") };
std::cout << "Full name is: " << result << std::endl;
}
Здесь у нас есть функция GetFullName
, которая принимает две строки в качестве параметров. Эти параметры также называются формальными параметрами или аргументами функции. Так наша функция предоставляет интерфейс, ожидая две строки.
В функции main
происходит вызов функции GetFullName
с передачей фактических аргументов. Количество и типы передаваемых аргументов должны соответствовать интерфейсу функции, иначе программа не будет скомпилирована.
Когда функция вызывается, все параметры функции создаются как переменные. При этом значение каждого из аргументов копируется в соответствующий параметр. Этот процесс называется передачей по значению.
Рассмотрим следующий пример:
#include <iostream>
int AddOne(int num) {
return num + 1;
}
int main() {
int number = 1;
std::cout << number << std::endl;
int result = { AddOne(number) };
std::cout << "number = " << number << std::endl;
std::cout << "result = " << result << std::endl;
}
Эта программа создает следующий вывод:
number = 1 result = 2
Обратим внимание на следующее:
AddOne
. При компиляции программы вместо переменной подставляется ее значениеnumber
не изменяется. Это происходит из-за того, что параметр передается по значению. Также при вызове функции внутри нее создается локальная переменная num
, в которую копируется значение переменной number
. Так функция работает с копией данных, а не с их оригиналомЭтот процесс и называется передачей параметров в функцию по значению.
Итак, в этом уроке мы изучили понятия параметров и аргументов функции, а также то, как передавать параметры в функцию по значению. В C++ еще существует способ передачи параметров по ссылке, о котором мы поговорим в следующих уроках.
Реализуйте функцию Remainder()
, которая принимает число типа int
и возвращает остаток от деления на два. Остаток от деления можно взять с помощью оператора %
.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1#include "test_helper.h"
2#include "main.cpp"
3
4TEST_CASE("testing the remainder function") {
5 CHECK(Remainder(2) == 0);
6 CHECK(Remainder(3) == 1);
7}
8
Решение учителя откроется через: