Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1 курс / метод указания / Информатика. Основы программирования на С++. Учебное пособие.doc
Скачиваний:
142
Добавлен:
08.06.2015
Размер:
2.15 Mб
Скачать

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

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

}

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

Тип имя_функции (тип размерность, тип имя_массива[ ]) ,

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

float summ(int n, float a[], float b[])

Прототип соответственно имеет следующий вид:

float summ(int, float [], float []);

Вызов такой функции осуществляется в обычной форме:

summ(m, x, y),

где m,x,y– соответственно фактические размерность и имена массивов.

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

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

Примеры. Использование параметров по умолчанию:

а) объявления:

int summ (int a, int b=3);

double f (int, int=50, float=0.26);

void err (int=n); //n– глобальная переменная

б) вызовы функций:

summ (7);//опущен аргументb=3

summ (7,5);//второй аргумент изменен:b=5

f (3);//опущены последние параметры 50 и 0.26

err( );//аргумент равенn

В С++ свойство вложенности функций не предусмотрено, то есть нельзя внутри тела одной функции определить другую функцию. Однако можно вызывать одну функцию из другой. Кроме того, функция может вызвать саму себя (рекурсия).

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