- •Тема 5. Функции Функции
- •Объявление и определение функций
- •[Класс] тип имя ([список_параметров]);
- •Void main()
- •Void main()
- •Параметры функции
- •Void f(int , int* , int& );
- •Int main()
- •Void f(int I, int* j, int& k)
- •Передача массивов в функции
- •Передача многомерных массивов в функции
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Int main (int argc, char *argv[], char *argp[])
- •Int main ( int argc, char *argv[], char *argp[])
Тема 5. Функции Функции
При решении сложной задачи мы разбиваем ее на части. В C++ задача может быть разделена на более простые подзадачи, которые оформляются в виде функций, после чего программу можно рассматривать в более укрупненном виде — на уровне взаимодействия функций. Использование функций ведет к упрощению ее структуры.
Разделение программы на функции позволяет также избежать избыточности кода, поскольку функцию записывают один раз, а вызывать ее на выполнение можно многократно из разных точек программы. Процесс отладки программы, содержащей функции, можно лучше структурировать. Часто используемые функции можно помещать в библиотеки. Таким образом создаются более простые в отладке и сопровождении программы.
Функции и связанные с ними данные можно группировать в отдельные файлы (модули), компилируемые раздельно. Получившиеся в результате компиляции объектные модули объединяются в исполняемую программу с помощью компоновщика. Разбиение на модули уменьшает время перекомпиляции и облегчает процесс отладки, скрывая несущественные детали за интерфейсом модуля и позволяя отлаживать программу по частям (или разными программистами).
Объявление и определение функций
Функция — это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция в C++ объявляется, определяется, вызывается. К функции можно обращаться по имени, передавать ей значение и получить из нее результат.
Любая программа на C++ состоит из функций, одна из которых должна иметь имя main (с нее начинается выполнение программы). Функция начинает выполняться в момент вызова. Любая функция должна быть объявлена и определена. Следуя золотому правилу программирования объявление функции должно находиться в тексте раньше ее вызова для того, чтобы компилятор мог осуществить проверку правильности вызова.
Структура программы с использованием функций:
#include подключение библ. файлов Объявление глобальных переменных Объявление функции (прототип) int main() { Объявление локальных переменных … вызов функции … } Определение функции |
#include подключение библ. файлов Объявление глобальных переменных Определение функции int main() { Объявление локальных переменных … вызов функции … }
|
Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого значения и список передаваемых параметров:
[Класс] тип имя ([список_параметров]);
Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:
[класс] тип имя ([список_параметров])
{тело функции:
объявление локальных переменных
операторы
return [выражение]}
Рассмотрим составные части определения:
- с помощью необязательного модификатора класс можно явно задать область видимости функции, используя ключевые слова extern и static:
- extern – глобальная видимость во всех модулях программы (по умолчанию);
- static – видимость только в пределах модуля, в котором определена функция;
- тип возвращаемого функцией значения может быть любым, кроме массива и функции (но может быть указателем на массив или функцию). Если функция не должна возвращать значение, указывается тип void. По умолчанию (если тип опущен) предполагается, что возвращается тип int;
- список параметров определяет величины, которые требуется передать в функцию при ее вызове. Элементы списка параметров разделяются запятыми. Для каждого параметра, передаваемого в функцию, указывается его тип и имя. Функция также может не иметь параметров. В этом случае объявление параметров в определении и прототипе может быть либо пустым, либо может состоять из одного ключевого слова void.
- return служит для выхода из функции и возврата значения в вызвавшую ее функцию.
Функция может содержать несколько операторов return (это определяется потребностями алгоритма и может быть реализовано с помощью операторов условия). Если функция описана как void, выражение не указывается. Оператор return можно опускать для функции типа void, если возврат из нее происходит перед закрывающей фигурной скобкой. Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции.
Для вызова функции необходимо указать ее имя, и в круглых скобках через запятую передать ей набор аргументов в соответствии с параметрами указанными в заголовке функции:
имя (аргумент1, аргумент2, аргумент3…);
Если тип возвращаемого функцией значения не void, она может входить в состав выражений или, в частном случае, располагаться в правой части оператора присваивания.
В определении, в объявлении и при вызове одной и той же функции типы и порядок следования параметров должны совпадать. На имена параметров и аргументов ограничений по соответствию не накладывается, поскольку функцию можно вызывать с различными аргументами.
Пример 1. Функция округления до определенного количества разрядов
#include <stdio.h>
#include <math.h>
#include <conio.h>
float round(float f, int n)
{
return(floor(f*pow(10,n)+0.5)/pow(10,n));
}
