Функции в С++

Содержание

Слайд 2

Определение функции

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

Определение функции Функция определяет действия, которые выполняет программа. Функции позволяют выделить набор
и придать ему имя. А затем многократно по присвоенному имени вызывать в различных частях программы. По сути функция - это именованный блок кода. Первая строка представляет заголовок функции. Вначале указывается возвращаемый тип функции. Если функция не возвращает никакого значения, то используется тип void.
Затем идет имя функции, которое представляет произвольный идентификатор. К именованию функции применяются те же правила, что и к именованию переменных.
После имени функции в скобках идет перечисление параметров. Функция может не иметь параметров, в этом случае указываются пустые скобки.
После заголовка функции в фигурных скобках идет тело функции, которое содержит выполняемые инструкции.
Для возвращения результата функция применяет оператор return. Если функция имеет в качестве возвращаемого типа любой тип, кроме void, то она должна обязательно с помощью оператора return возвращать какое-либо значение.

Слайд 3

Выполнение функции

Для выполнения функции ее необходимо вызвать. Вызов функции осуществляется в форме.

Выполнение функции Для выполнения функции ее необходимо вызвать. Вызов функции осуществляется в
После имени функции указываются скобки, в которых перечисляются аргументы - значения для параметров функции.
Например, определим и выполним простейшую функцию. Здесь определена функция hello, которая вызывается в функции main два раза. В этом и заключается преимущество функций: мы можем вынести некоторые общие действия в отдельную функцию и затем вызывать многократно в различных местах программы. В итоге программа два раза выведет строку "hello".

Слайд 4

Объявление функции

При использовании функций стоит учитывать, что компилятор должен знать о функции

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

Слайд 5

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

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

Параметры функции Через параметры в функцию можно передать различеые значения. Параметры перечисляются
скобках после имени функции имеют следующее определение.
Функция exchange принимает два параметра типа double, которые называются currate (текущий курс) и sum (сумма, которую надо обменять). При вызове функции exchange для этих параметров необходимо передать значения.
Функция display принимает параметры типов string и int.
Функция square принимает число и выводит на консоль его квадрат. Параметр функции представляет тип int, однако при ее вызове ей передается число с плавающей точкой, то есть значение типа double.

Слайд 6

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

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

Аргументы по умолчанию

Слайд 7

Передача аргументов по значению

Аргументы могут передаваться по значению (by value) и по

Передача аргументов по значению Аргументы могут передаваться по значению (by value) и
ссылке (by reference). При передаче аргументов по значению внешний объект, который передается в качестве аргумента в функцию, не может быть изменен в этой функции. В функцию передается само значение этого объекта.
Функция square принимает два числа и возводит их в квадрат.  При выполнении мы увидим, что изменения аргументов в функции square действуют только в рамках этой функции. Вне ее значения переменных a и b остаются неизменными:

Слайд 8

При передаче параметров по ссылке передается ссылка на объект, через которую мы

При передаче параметров по ссылке передается ссылка на объект, через которую мы
можем манипулировать самим объектов, а не просто его значением. Теперь параметры a и b передаются по ссылке. Ссылочный параметр связывается непосредственно с объектом, поэтому через ссылку можно менять сам объект. И если мы скомпилируем и запустим программу, то результат будет иным

Передача параметров по ссылке

Слайд 9

Передача по ссылке позволяет возвратить из функции сразу несколько значений. Также передача

Передача по ссылке позволяет возвратить из функции сразу несколько значений. Также передача
параметров по ссылке является более эффективной при передаче очень больших объектов. От передачи аргументов по ссылке следует отличать передачу ссылок в качестве аргументов. Если функция принимает аргументы по значению, то изменение параметров внутри функции также никак не скажется на внешних объектах, даже если при вызове функции в нее передаются ссылки на объекты.

Передача параметров по ссылке

Слайд 10

Параметры могут быть константными - значения таких параметров не могут меняться. Например:
То

Параметры могут быть константными - значения таких параметров не могут меняться. Например:
же самое касается и передачи параметра по ссылке:
Константному параметру можно передать в качестве аргумента как константу, так и переменную:

Константные параметры

Слайд 11

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

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

Константные ссылки

Слайд 12

Для возвращения результата из функции применяется оператор return. Этот оператор имеет две формы:
Первая

Для возвращения результата из функции применяется оператор return. Этот оператор имеет две
форма используется, если в качестве возвращаемого типа функции применяется тип void.
В данном случае функция factorial вычисляет факториал переданного числа. Однако если число меньше 1, то функция выводит соответствующее сообщение, и с помощью оператора return осуществляется выход из функции.

Оператор return и возвращение результата

Слайд 13

Вторая форма оператора return применяется для возвращения результата из функции. Если функция

Вторая форма оператора return применяется для возвращения результата из функции. Если функция
имеет в качестве возвращаемого типа любой тип, отличный от void, то такая функция обязятельно должна возвратить некоторое значение с помощью оператора return. Причем значение, которое возвращается оператором return, должно соответствовать возвращаемому типу функции, либо допускать неявное преобразование в этот тип.
Так как функция factorial возвращает значение, то ее результат можно присвоить какой-нибудь переменной или константе:

Оператор return и возвращение результата

Слайд 14

Не следует возвращать ссылку на локальный объект, который создается внутри функции. Поскольку

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

Возвращение ссылки

Слайд 15

Рекурсивные функции - это функции, которые вызывают сами себя. Например, определим вычисление

Рекурсивные функции - это функции, которые вызывают сами себя. Например, определим вычисление
факториала в виде рекурсивной функции:
В функции factorial задано условие, что если число n больше 1, то это число умножается на результат этой же функции, в которую в качестве параметра передается число n-1. То есть происходит рекурсивный спуск. И так далее, пока не дойдем того момента, когда значение параметра не будет равно 1. В этом случае функция возвратит 1. Рекурсивная функция обязательно должна иметь некоторый базовый вариант, который использует оператор return и к которому сходится выполнение остальных вызовов этой функции

Рекурсивные функции

Слайд 16

Другим распространенным показательным примером рекурсивной функции служит функция, вычисляющая числа Фиббоначчи. n-й

Другим распространенным показательным примером рекурсивной функции служит функция, вычисляющая числа Фиббоначчи. n-й
член последовательности чисел Фибоначчи определяется по формуле: f(n)=f(n-1) + f(n-2), причем f(0)=0, а f(1)=1. Значения f(0)=0 и f(1)=1, таким образом, определяют базовые варианты для данной функции:
Результат работы программы - вывод 10 чисел из последовательности Фиббоначчи на консоль:
Имя файла: Функции-в-С++.pptx
Количество просмотров: 43
Количество скачиваний: 0