Функция - специальная конструкция, с помощью которой какой-либо фрагмент кода повторяющийся в программе два или более раз выносится за тело программы. Этот фрагмент получает собственное имя и, в дальнейшем, для того, чтобы воспользоваться вынесенным кодом, необходимо будет указать это имя.
Существует два способа объявления функции в языке C++:
возвращаемое_значение имя_функции (параметры) { блок_повторяющегося_кода (тело); }
Для возвращения Значения из функции в программу на то место, из которого была вызвана эта функция, используется оператор return. Синтаксис возврата таков:
return значение;
Если функция не возвращает никаких значений, то оператор return можно использовать просто для остановки функции, для этого просто пишем:
return; // в данном случае return отработает для функции, как break для цикла.
Запомните важные моменты обращения с return:
Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом. Функция main передает управление операционной системе. Формат оператора:
return [выражение] ;
Значение выражения, если оно задано, возвращается в вызывающую функцию в качестве значения вызываемой функции. Если выражение опущено, то возвращаемое значение не определено. Выражение может быть заключено в круглые скобки, хотя их наличие не обязательно.
Если в какой-либо функции отсутствует оператор return, то передача управления в вызывающую функцию происходит после выполнения последнего оператора вызываемой функции. При этом возвращаемое значение не определено. Если функция не должна иметь возвращаемого значения, то ее нужно объявлять с типом void.
Таким образом, использование оператора return необходимо либо для немедленного выхода из функции, либо для передачи возвращаемого значения.
Пример:
int sum (int a, int b) { renurn (a+b); }
Функция sum имеет два формальных параметра a и b типа int, и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.
Пример:
void prov (int a, double b) { double c; if (a<3) return; else if (b>10) return; else { c=a+b; if ((2*c-b)==11) return; } }
В этом примере оператор return используется для выхода из функции в случае выполнения одного из проверяемых условий.
Поговорим, о том, что происходит в оперативной памяти. Аргументы, которые указываются при определении функции, называются формальными. Это связанно с тем что, они создаются в момент вызова функции в оперативной памяти. При выходе из функции такие параметры будут уничтожены. Поэтому, если в другой функции программы будут параметры с тем же именем, то конфликта не будет.
Передача аргументов функциям по значению - т.е. передаваемые значения просто копируются.
Так как в C передача аргументов функциям осуществляется "по значению", вызванная процедура не имеет непосредственной возможности изменить переменную из вызывающей программы. Что же делать, если вам действительно надо изменить аргумент?
Ссылочные переменные используются достаточно редко: значительно удобнее использовать саму переменную, чем ссылку на нее. В качестве параметров функции ссылки имеют более широкое применение. Ссылки особенно полезны в функциях, возвращающих несколько объектов (значений).
Формальному параметру функции может быть задан аргумент по умолчанию. Это означает, что в данный аргумент значение при вызове можно не передавать. В этом случае будет использовано значение по умолчанию.
Общий синтаксис для реализации такого подхода имеет следующий вид:
тип_возвращаемого_значения имя_функции(тип_арг имя_арг=значение_по_умолчанию)
Здесь значение_по_умолчанию и есть значение, присваиваемое аргументу, если он опущен при вызове. Разумеется, аргументов по умолчанию может быть несколько:
тип_возвращаемого_значения имя_функции(арг1=значение, арг2=значение)
Аргументами по умолчанию могут быть аргументы, начиная с правого конца списка параметров функции и далее последовательно слева направо без перерывов.Например:
void foot (int i, int j = 7) ; //допустимо void foot (int i, int j = 2, int k) ; //недопустимо void foot (int i, int j = 3, int k = 7) ; //допустимо void foot (int i = 1, int j = 2, int k = 3); //допустимо void foot (int i=- 3, int j); //недопустимо
Рассмотрим пример на работу с параметрами по умолчанию.
#include <iostream> using namespaсe std; // рисует линию из звездочек длиной count void Star(int count=20){ for(int i=0;i<count;i++) cout<<'*'; cout<<"\n\n"; } void main(){ Star(); // показ линии из 20 звездочек Star(5); // показ линии из пяти звездочек }