Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiS.doc
Скачиваний:
81
Добавлен:
13.04.2015
Размер:
815.1 Кб
Скачать

9 Функции

9.1 Функция для сложения чисел

З а д а ч а. Сложить 2 числа, результат вернуть в программу.

Р е ш е н и е.

#include <iostream.h>

float sum(float a, float b)

{

return a+b;

}

void main( )

{

сout << sum(3,5);

}

Параметры передаются функции только по значению.

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

Передача параметров и возврат значения происходит по правилам инициализации переменных, а не присваивания. Это различие существенно для ссылок, о которых будет сказано ниже.

Объявление функции можно отделить от ее определения. В этом случае объявление может не содержать имен параметров, например

float sum(float, float);

Определения функций не могут быть вложенными.

Функция может не иметь параметров, может не возвращать значения. Например,

void Empty(void) {return;}

В С++ не существует специального оператора процедуры. Любое выражение становится оператором, если после него поставить знак “;”. Когда возвращаемое значение, нас не интересует, функцию можно вызвать так

sum (3,5);

9.2 Ссылки

Чтобы передавать параметры по имени, в С++ существуют ссылки. Ссылка — это разновидность указателя, который инициализируется только однажды, в момент своего определения.

Синтаксис определения ссылки следующий:

тип& имя = инициализирующее выражение;

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

П р и м е р.

int n=5, &rn=n; // синоним

int n=5, &rn=n+2; // временная переменная

После инициализации ссылки-синонима все операции над ней фактически выполняются над переменной, которой она проинициализирована.

rn = 6; // равносильно n = 6

rn++; // равносильно n++

9.3 Выходные параметры функции

З а д а ч а. Определить функцию, которая меняет местами значения двух переменных.

Р е ш е н и е 1.

void swap(int *a, int*b)

{

int r;

r = *a; *a = *b; *b = r;

}

Передаются не переменные, а указатели на них. Функция вызывается так:

int x = 5, y = 3;

swap(&x,&y)

Р е ш е н и е 2.

void swap(int &a, int &b)

{

int r;

r = a; a = b; b = r;

}

Параметры являются ссылками, т.е. новыми именами аргументов. Функция вызывается так:

int x = 5, y = 3;

swap(x,y);

Параметры-ссылки полностью аналогичны параметрам-переменным Паскаля.

Р е ш е н и е 3. Типичное для для программирующих на С.

void swap(int &a, int &b) {a^= b^= a^= b;}

Если вы его пока не поняли, не отчаивайтесь.

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

void f(const large &a, const large *b);

Используйте const, где только это возможно, чтобы обезопасить программу от случайных изменений параметров.

З а м е ч а н и е.

const large *a — так определяют указатель на константу;

large * const a — так определяют постоянный указатель;

const large * const a — так определяют постоянный указатель на константу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]