Похожие презентации:
Использование функций в С++ для АСУб и ЭВМб. Тема 3-2
1.
Тема 3-2.Использование функций в С++
для АСУб и ЭВМб
2. Темы лекции
• Модульное программирование ифункциональная декомпозиция
• Использование функций в С++
• Особенности передачи параметров
• Сквозной пример II
3. Описание функций на С++
Описание функции на языке С++ осуществляется влюбом месте программы вне описания других
функций и состоит из трех элементов:
• прототип функции;
• заголовок функции;
• тело функции.
4. Объявление и определение функции
■■
■
Объявление функции (прототип) задает имя функции, тип
возвращаемого значения и список передаваемых параметров.
//объявление
<тип> <имя_функции> ([<список_формальных_параметров>]);
Определение функции содержит, кроме объявления, тело функции,
которое представляет собой последовательность описаний и
операторов.
//определение
<тип> <имя_функции> ([<список_формальных_параметров>])
{
<тело_функции>
}
<Тело_функции>::=<блок>| <составной оператор>.
Внутри функции нельзя определить другую функцию
4
5. Параметры функции
Параметры функции – значения, передаваемые в функцию приее вызове. Выделяют понятия: формальные и фактические
параметры.
Формальные параметры – переменные, описываемые при
объявлении функции в ее прототипе и заголовке и
используемые в программном коде тела функции:
• элементы списка разделяются запятыми
• для каждого параметра указывается тип и имя.
• в объявлении имена можно не указывать.
Фактические параметры – переменные, выражения, константные
значения или вызовы других функций,
указываемые при
непосредственном вызове функции внутри другой функции.
6. Параметры функции
• Формальные параметры – параметры, описанные вфункции.
• Фактические параметры – параметры, передаваемые в
функцию.
определение функции
Тело
функции
Формальные параметры
вызов функции
Фактические параметры
7. Возвращаемое значение
■В теле функции может быть оператор, который
возвращает полученное значение функции в точку
вызова:
❑
■
■
■
■
return <выражение>;
Используется для возврата результата, поэтому
выражение должно иметь тот же тип, что и тип функции
в определении.
Тип возвращаемого значения может быть любым, кроме
массива и функции, но может быть указателем на массив
или функцию.
Если функция не возвращает результат, то в качестве ее
типа указывается ключевое слово void.
В функции можно использовать несколько операторов
return: при выполнении любого из них работа процедуры
заканчивается
7
8. Использование функций
■■
■
■
Объявление функции должно находиться в
тексте раньше вызова функции, чтобы
компилятор мог осуществить проверку
правильности вызова.
Если функция имеет тип не void, то ее вызов
может быть операндом выражения.
Если функция func () объявлена без параметров,
то ее вызовом является имя с пустыми скобками:
func().
Параметры функции могут быть константными:
их невозможно изменить. Для описания
такого параметра перед его типом указывается
ключевое слово const.
8
9. Передача параметров по значению и по ссылке
В языках программирования высокого уровняреализованы два механизма передачи
параметров:
• по значению;
• по ссылке.
10. Передача параметров по значению
1.2.
3.
4.
Вычисляются значения выражений, стоящие на
месте фактических параметров
В стеке выделяется память под формальные
параметры функции;
Каждому формальному параметру
присваивается значение фактического
параметра, при этом проверяются соответствия
типов и при необходимости выполняются их
преобразования.
В стек заносятся копии значений аргументов, и
операторы функции работают с этими копиями.
Доступа к исходным значениям параметров у
функции нет, а, следовательно, нет и
возможности их изменить.
10
11.
#include <iostream>
using namespace std;
void add(int c) // Попытка изменить аргумент
{ c++; }
int main()
{
int x = 1;
add(x);
cout << "x = " << x << endl;
add(2);
return 0;
}
12. Передача параметров по адресу
В стек заносятся копии адресовпараметров, следовательно, у
функции появляется доступ к
ячейке памяти, в которой
находится фактический
параметр и она может его
изменить.
■ В С++ возможно использовать
указатели и ссылки
■
12
13.
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=”<<y;
1
а
1
x
5
b
5
y
r
13
14.
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=”<<y;
&x
а
1
x
&y
b
5
y
r
14
15.
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=”<<y;
&x
а
1
x
&y
b
5
y
r
15