Параметры функции


Через параметры в функцию можно передать различеые значения. Параметры перечисляются в скобках после имени функции имеют следующее определение:

1
тип название_параметра
Например, определим программу обменного пункта:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>

void exchange(double, double);

int main()
{
double rate = 58;
double sum = 5000;
exchange(rate, sum);
exchange(60, 5000);
return 0;
}

void exchange(double currate, double sum)
{
double result = sum / currate;
std::cout << "Rate: " << currate << "\tSum: " << sum
<< "\tResult: " << result << std::endl;
}
При запуске программы мы получим следующий консольный вывод:

Rate: 58 Sum: 5000 Result: 86.2069
Rate: 60 Sum: 5000 Result: 83.3333
Функция exchange принимает два параметра типа double, которые называются currate (текущий курс) и sum (сумма, которую надо обменять).

При вызове функции exchange для этих параметров необходимо передать значения. Значения, передаваемые параметрам функции при ее вызове, называются аргументами. В данном случае в качестве аргументов передаются обычные числа. При этом аргументы передаются по позиции, то есть первый аргумент передается первому параметру, второй аргумент - второму параметру и так далее. При этом аргументы должны соответствовать параметрам по типу или допускать неявно преобразование в тип параметра.

Рассмотрим еще один пример с функциями:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>

void square(int);
void display(std::string, int);

int main()
{
display("Tom", 33);
square(4.56);

return 0;
}
void square(int x)
{
std::cout << "Square of " << x << " is equal to " << x * x << std::endl;
}

void display(std::string name, int age)
{
std::cout << "Name: " << name << "\tAge: " << age << std::endl;
}
Функция display принимает параметры типов string и int. При вызове этой функции в нее вначале передается строка ("Tom"), так как параметр типа string идет первым, а потом число (33), так как параметр типа int идет вторым: display("Tom", 33)

Функция square принимает число и выводит на консоль его квадрат. Параметр функции представляет тип int, однако при ее вызове ей передается число с плавающей точкой, то есть значение типа double. Поэтому производится преобразование от типа double к типу int, дробная часть отбрасывается, и в итоге функция получает число 4.

Аргументы по умолчанию
Функция может принимать аргументы по умолчанию, то есть некоторые значения, которые функция использует, если при вызове для параметров явным образом не передается значение:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>

void multiply(int n, int m = 3)
{
int result = n * m;
std::cout << "n * m = " << result << std::endl;
}
int main()
{
multiply(4, 5);
multiply(4);
return 0;
}
Для установки значения по умолчанию параметру присваивается это значение int m = 3. И если для второго параметра не будет передано значение, то он будет использовать значение по умолчанию. Консольный вывод программы:

n * m = 20
n * m = 12
При объявлении прототипа подобной функции он тоже может содержать значение по умолчанию для параметра. И в этом случае мы можем не определять в функции значение по умолчанию для параметра - оно будет браться из прототипа:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>

void multiply(int n, int m=3);

int main()
{
multiply(4, 5);
multiply(4);
return 0;
}

void multiply(int n, int m)
{
int result = n * m;
std::cout << "n * m = " << result << std::endl;
}