Использование функций в С++ для АСУб и ЭВМб. Тема 3-2

Содержание

Слайд 2

Темы лекции Модульное программирование и функциональная декомпозиция Использование функций в С++

Темы лекции

Модульное программирование и функциональная декомпозиция
Использование функций в С++
Особенности передачи параметров
Сквозной

пример II
Слайд 3

Описание функций на С++ Описание функции на языке С++ осуществляется в

Описание функций на С++

Описание функции на языке С++ осуществляется в любом месте

программы вне описания других функций и состоит из трех элементов:
прототип функции;
заголовок функции;
тело функции.
Слайд 4

Объявление и определение функции Объявление функции (прототип) задает имя функции, тип

Объявление и определение функции

Объявление функции (прототип) задает имя функции, тип возвращаемого

значения и список передаваемых параметров.
//объявление
<тип> <имя_функции> ([<список_формальных_параметров>]);
Определение функции содержит, кроме объявления, тело функции, которое представляет собой последовательность описаний и операторов.
//определение
<тип> <имя_функции> ([<список_формальных_параметров>])
{
<тело_функции>
}
<Тело_функции>::=<блок>| <составной оператор>.
Внутри функции нельзя определить другую функцию
Слайд 5

Параметры функции Параметры функции – значения, передаваемые в функцию при ее

Параметры функции

Параметры функции – значения, передаваемые в функцию при ее вызове.

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

Параметры функции Формальные параметры – параметры, описанные в функции. Фактические параметры

Параметры функции

Формальные параметры – параметры, описанные в функции.
Фактические параметры – параметры,

передаваемые в функцию.

Формальные параметры

Фактические параметры

Тело функции

определение функции

вызов функции

Слайд 7

Возвращаемое значение В теле функции может быть оператор, который возвращает полученное

Возвращаемое значение

В теле функции может быть оператор, который возвращает полученное значение

функции в точку вызова:
return <выражение>;
Используется для возврата результата, поэтому выражение должно иметь тот же тип, что и тип функции в определении.
Тип возвращаемого значения может быть любым, кроме массива и функции, но может быть указателем на массив или функцию.
Если функция не возвращает результат, то в качестве ее типа указывается ключевое слово void.
В функции можно использовать несколько операторов return: при выполнении любого из них работа процедуры заканчивается
Слайд 8

Использование функций Объявление функции должно находиться в тексте раньше вызова функции,

Использование функций

Объявление функции должно находиться в тексте раньше вызова функции, чтобы

компилятор мог осуществить проверку правильности вызова.
Если функция имеет тип не void, то ее вызов может быть операндом выражения.
Если функция func () объявлена без параметров, то ее вызовом является имя с пустыми скобками: func().
Параметры функции могут быть константными: их невозможно изменить. Для описания такого параметра перед его типом указывается ключевое слово const.
Слайд 9

Передача параметров по значению и по ссылке В языках программирования высокого

Передача параметров по значению и по ссылке
В языках программирования высокого уровня

реализованы два механизма передачи параметров:
по значению;
по ссылке.
Слайд 10

Передача параметров по значению Вычисляются значения выражений, стоящие на месте фактических

Передача параметров по значению

Вычисляются значения выражений, стоящие на месте фактических параметров
В

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

#include using namespace std; void add(int c) // Попытка изменить аргумент

#include
using namespace std;
void add(int c) // Попытка изменить аргумент
{ c++;

}
int main()
{
int x = 1;
add(x);
cout << "x = " << x << endl;
add(2);
return 0;
}
Слайд 12

Передача параметров по адресу В стек заносятся копии адресов параметров, следовательно,

Передача параметров по адресу

В стек заносятся копии адресов параметров, следовательно, у

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

void swap (int a, int b) //передача по значению { int

void swap (int a, int b) //передача по значению
{
int r=a;
a=b;
b=r;
}
//вызов функции
int x=1,y=5;
swap(x,y);


cout<<”x=”<

1

5

а

b

r

1

5

x

y

Слайд 14

void swap (int* a, int* b) //передача по адресу (с помощью

void swap (int* a, int* b) //передача по адресу (с помощью

указателей)
{
int r=*a;
*a=*b;
*b=r;
}
//вызов функции
int x=1,y=5;
swap(&x,&y);
cout<<”x=”<

&x

&y

а

b

r

1

5

x

y