Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие С++.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.14 Mб
Скачать

6.1. Описание, объявление и вызов функций

Любая программа на С++ состоит из функций, по крайней мере, одной функции main, называемой главной функцией. С нее всегда начинается выполнение программы.

Каждая функция должна быть определена или объявлена до ее использования в программе. Определение (описание) функции состоит из заголовка и тела функции и имеет следующую форму:

тип_результата имя_функции (список_параметров) //заголовок функции

{тело_функции}

Тип возвращаемого значения (результата) может быть любым, кроме массива и функции. Если функция не должна возвращать значение, то указывается тип void, например:

void main ( )

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

Например: stepen, summa, sort, koren.

Список параметров (аргументов) определяет величины, которые требуется передать в функцию при ее вызове. Их часто называют формальными параметрами. Элементы списка разделяются запятыми. Для каждого параметра указывается его тип и имя. При отсутствии аргументов список может быть пустым ( ) или иметь спецификатор void.

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

Пример. Определение функции вычисления :

double koren (double x, int n) //заголовок функции

{ double y=pow(x,1.0/n); //1.0 исключает целочисленное деление

return y; //возвращение значения у

}

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

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

double koren (double, int);

После того как функция объявлена, ее можно использовать в программе. Если функция описана раньше ее использования, то прототип не требуется.

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

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

Механизм возврата из функции реализуется оператором

return выражение;

Функция может содержать несколько операторов return (это определяется потребностями алгоритма). Для функции типа void выражение в операторе return не указывается; более того, если возврат из нее происходит в конце тела функции перед закрывающей фигурной скобкой, оператор return можно опустить. В этом случае компилятор предполагает, что оператор return находится в самом конце тела функции и добавляет его сам при компиляции.

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

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

#include <iostream.h>

float max(int, int); // прототип

void main(void) //void в скобках можно опустить

{ int x,y;

cin>>x>>y; //Ввод фактических параметров

float z=max(x,y); //Вызов функции с возвращением значения

cout<<"z="<<z; //z можно заменить вызовом max(x,y)

return; //Оператор return можно опустить

}

//Описание функции max

float max(int a,int b) //a и b – формальные параметры

{ return (a>=b)? a:b; //Автоматическое преобразование int в float

}

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