Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

1.4. Функции 27

Если так, тип возвращения недействителен. Функция, которая не возвращает стоимости, иногда вызывается процедура.

Имя функции. Это указывает на имя, которое дано функции. Идеально,

имя функции должно предоставить намек читателю относительно того, что делает функция.

Список аргументов. Это служит списком заполнителей для ценностей, которые будут

переданный в функцию. Фактические значения будут обеспечены, когда func-tion будет призван. Например, функция, которая вычисляет область многоугольника, могла бы взять четыре двойных аргумента; x-и y-координаты левого нижнего угла rectan-gle и x-и y-координаты правого верхнего угла прямоугольника. Список аргументов дан как отделенный от запятой список, приложенный в круглых скобках, где каждый вход состоит из названия аргумента и его типа. У функции может быть любое число аргументов, и список аргументов может даже быть пустым.

Тело функции. Это - коллекция C ++ заявления, которые определяют фактический com-

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

Технические требования функции в C ++, как правило, включают два шага, декларацию и определение - inition. Функция объявлена, определив три вещи: тип возвращения функции, его имя и его список аргументов. Декларация делает компилятор, знающий о существовании функции, и позволяет компилятору проверять, что функция используется правильно. Эту трехчастную комбинацию типа возвращения, имени функции и типов аргумента называют подписью или прототипом функции.

Например, предположите, что мы хотели создать функцию, вызванную evenSum, которому дают два аргумента, множество целого числа a и его длина n. Это определяет, является ли сумма ценностей множества даже, и раз так это возвращает верную стоимость. Иначе, это возвращается ложный. Таким образом у этого есть возвращаемое значение типа bool. Функция могла быть объявлена следующим образом:

bool evenSum (интервал [], интервал n); //декларация функции

Во-вторых, функция определена. Определение состоит обе из подписи функции и тела функции. Причина различения порции decla-и определения включает способ, которым большим C ++ написаны программы. Они, как правило, распространяются по многим различным файлам. Декларация функции должна появиться в каждом файле, который призывает функцию, но определение должно появиться только

28 Глава 1. C ++ учебник для начинающих

однажды. Вот то, как наша функция evenSum могла бы быть определена.

bool evenSum (интервал [], интервал n)

международная сумма = 0;

для (интервал i = 0; я <n; я ++)

суммируйте + = [я];

возвратитесь (% суммы 2) == 0;

//определение функции

//суммируйте элементы множества

//прибыль, верная, если сумма ровна

Выражение в заявлении возвращения может занять минуту, чтобы понять. Мы используем ультрасовременного оператора (%), чтобы вычислить остаток, когда сумма разделена на 2. Если сумма даже, остаток 0, и следовательно выражение» (% суммы 2) ==, 0 дюймов оценивают к истинному. Иначе, это оценивает к ложному, который является точно, что мы хотим.

Чтобы закончить пример, давайте предоставим простую главную программу, которая сначала объявляет функцию, и затем призывает ее на фактическое множество.

bool evenSum (интервал [], интервал n);

международное основное ()

международный список [] =4, 2, 7, 8, 5, 1;

bool заканчиваются = evenSum (список, 6);

//декларация функции

//призовите функцию

если (результат) единое время co <<«t h e s u m i s e v e n \n»; еще единое время co <<«t h e s u m i s o d d \n»;

возвратите ВЫХОДНОЙ УСПЕХ;

Давайте рассмотрим этот пример более подробно. Имена «a» и «n» в определении функции называют формальными аргументами, так как они служат просто заполнителями. Переменный «список» и опечатка «6» в вызове функции в главной программе - фактические аргументы. Таким образом каждая ссылка на «a» в теле функции транс - lated в ссылку на фактическое множество «список». Точно так же каждая ссылка на «n» может считаться берущий фактическое значение 6 в теле функции. Типы фактических аргументов должны согласиться с соответствующими формальными аргументами. Точное соглашение о типе не всегда необходимо, однако, поскольку компилятор может выполнить неявные преобразования типа в некоторых случаях, такие как кастинг короткого фактического спора, чтобы соответствовать международному формальному аргументу.

Когда мы обращаемся к именам функции всюду по этой книге, мы часто включаем пару круглых скобок после имени. Это облегчает отличать имена функции от имен переменной. Например, мы обратились бы к вышеупомянутой функции как evenSum.

1.4.1 Передача параметров

По умолчанию аргументы в C ++ программы переданы стоимостью. Когда аргументы

переданы стоимостью, система делает копию переменной, которая будет передана к