div.main {margin-left: 20pt; margin-right: 20pt}
Функции. Часть 1
А. Согомонян, Азбука Visual Basic
Функция-это подпрограмма (кусок программы), которую написав
один раз можно потом использовать(вызвать).
Прежде чем использовать функцию её надо обявить, Объявляют
функцию так:
возвращаемое_функцией_значение имя_функции ( аргументы_функции
) ;
например:
int myfunction( int x, int y);
Функция может и не принимать аргументов, но
скобки все равно ставить надо :]
float anotherfunction();
если вы не знаете какие аргументы будет принимать ваша функция то её можно обявить
так:
int func(...);
это значит что функцию можно вызывать с любым количеством аргументов любого
типа,например
func ( 1, 2,3, "a string.." ,10);
и т. д.
хотя объявлять такие функции очень не рекомендуется, и вообще вряд ли вам это
понадобится :]
возвращаемое значение это как бы тип функции, т. е значения какого типа она
возвращает после выполнения.
Например есть у вас фукция func(), которая возвращает значение типа int,то если
написать
int х;
х=func();
то x присвоится значение типа int возвращенное функцией
Функция может и не возвращать значения. Тогда её тип надо объявить как void
(пустой).
Итак, функцию мы объявили, сейчас надо написать тело функции (то есть что она
будет делать)
для этого пишем почти то же самое что и при объявлении, только вместо ;
в фигурных скобках пишется {тело функции}
int afunction (int a, float b)
{
//что-нибудь делаем с a и b
return 1;
}
return 1; значит что функция возвращает значение 1 то есть результатом
выполнения afunction( 2,3) будет число 1
В каждой программе на С++ есть главная функция main(),
которая вызывается сама (точнее её вызывает операционная система при запуске
программы). Она обычно имеет тип int . Хотя никто вам не запрещает,(за исключением
некоторых компиляторов :] ) объявить функцию main() как void но стандарты требуют
чтоб main() имела тип int и возвращала значение 0.
inline функции
при каждом вызове функции в памяти создается её копия, то есть
вызов функции расходует память. Если у вас есть маленькая функция которую приходится
часто вызывать то её можно обявить как inline (подставляемую). Объявленная
таким образом функция не вызывается каждый раз, вместо этого текст функции подставляется
в то место программы где она вызвана. При этом экономится память но увеличивается
размер кода.Чтобы обявить функцию как inline надо просто поставить слово inline
перед её объявлнием:
inline float ifunc();
Рекурсия
Вообще любая функция может вызвать саму себя. Это называется рекурсией. Вот
пример с рекурсией, вычислим степень числа.
float power( float number,int n)
{
if(n==1) return number; //число в степени 1 это само число
return number*power(number,n-1);
}
Все очень просто, для того чтоб получить число в степени n
умножаем число на себя в степени n-1.А чтобы получить степень n-1
умножаем степень n-2 на то же число.И так до текс пор пока n-...
не будет 1, в этом случае функция себя не вызовет.
Вообще будьте осторожны с рекурсией, может памяти не хватить :].
В рекурсивной функции должно быть условие при котором она себя не вызовет, и
это условие должно когда-нибудь выполниться.
|