Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
Пермский национальный исследовательский
политехнический университет
Кафедра «Информационные технологии и автоматизированные системы»
Лабораторная работа № 7
"Функции"
Выполнил: студент группы РИС-16-1б
Патрушев Антон Дмитриевич
Проверил: доцент кафедры ИТАС
Полякова О.А.
Пермь, 2017
Содержание отчета
Введение
Объявление функции (прототип). Определение функции
Область действия переменных: глобальные, локальные и статические переменные
Параметры функции
Передача параметров в функцию: одномерные массивы, строки
Функции с переменным количеством параметров
Перегрузка функций
Функции.
Введение.
С увеличением объема программы становится практически невозможно удерживать в памяти все её детали. Чтобы уменьшить сложность программы, её разбивают на части. В C++ программа может быть разделена на более простые задачи с помощью функций.
Функция – это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Функция может принимать параметры, возвращать какое-либо значение или не возвращать его.
Разделение задачи на функции позволяет избежать избыточности кода, так как функцию записывают один раз, а вызывают многократно. Программу, которая содержит функции, легче отлаживать.
Любая программа на C++ состоит из функций, одна из которых должна иметь имя main (функция, вызываемая операционной системой для запуска программы). Функция начинает выполняться в момент вызова. Чтобы к функции можно было обратиться, она должна быть объявлена и определена.
Объявление функции (прототип). Определение функции.
Объявление функции (прототип) задает ее имя, тип возвращаемого значения и список передаваемых параметров. Объявление должно находиться в тексте программы раньше вызова функции, чтобы компилятор мог осуществить проверку правильности вызова.
тип имя_функции(тип_параметра, тип_параметра, …);
Определение функции содержит, кроме объявления, тело функции, которое представляет собой последовательность описаний и операторов.
тип имя_функции(параметр, параметр, …){
тело_функции;
}
Объявление функции начинается с определения типа возвращаемого значения. Тип возвращаемого значения может быть любым. Единственное, чем не может быть возвращаемое значение, — это массивом. В то время как в языке C можно было опустить возвращаемое значение, и тип функции автоматически определялся в качестве int, в стандарте ANSI C++ это не допускается – тип возвращаемого значения должен быть указан явно. Если функция не должна возвращать значение, ее тип определяется ключевым словом void.
За типом возвращаемого значения следует имя функции. Оно подчиняется тем же правилам, что и имя переменных. Имя начинается с латинской буквы или знака подчеркивания. Затем следует любое количество латинских букв, цифр и знаков подчеркивания. Регистр букв в имени функции учитывается. Есть смысл потратить время на поиск подходящего имени, поскольку оно должно облегчать читаемость кода программы и в то же время быть заметным, чтобы не приходилось при каждом вызове функции возвращаться к ее определению.
За именем функции следуют скобки, в которых могут содержаться параметры функции. Функция может как вообще не иметь параметров, так и иметь любое их количество, при этом они разделяются запятой. Определение параметра соответствует определению переменной. Если параметры отсутствуют, скобки остаются пустыми или содержат ключевое слово void. Что такое параметры и как они должны быть построены, будет рассмотрено позже.
В определении функции в фигурных скобках следует тело функции — блок команд, который содержит выполняемый функцией код и завершается командой return (может быть опущена, если тип функции определяется как void и функция, так или иначе, завершит свою работу). Пока функция имеет возвращаемое значение, после return должна быть указана переменная (return 0; return a;).
Функция вызывается посредством указания ее имени. После него располагается пара скобок с параметрами или без них, в зависимости от того, присутствуют ли они в определении и объявлении функции. Параметры вызова функции должны соответствовать определенным требованиям, описанным ниже. Если функция возвращает некоторое значение, ее вызов можно использовать в выражении. Например, вызов функции может располагаться справа от оператора присваивания.
a = func(b); //Только если функция возвращает значение!
//Вызов функции суммы через оператор консольного вывода
int sum(int c, int d){
return c + d;
}
int main(){
int a, b;
cin >> a >> b;
cout << sum(a, b);
}
Область действия переменных: глобальные, локальные и статические переменные
Прежде чем приступить к параметрам функции, следует упомянуть, что переменные могут иметь различную область действия. В функциях область действия переменных имеет большое значение: функции должны быть написаны так, чтобы они были как можно более закрытыми от доступа извне, и это как раз касается области действия переменных.
Глобальные переменные
Переменные, объявленные вне функций, действительны во всех функциях программы – такие переменные называются глобальными. Хотя значения глобальных переменных и устанавливаются равными 0 при их объявлении, рекомендуется инициализировать их самостоятельно.
#include <iostream>
using namespace std;
//Объявление глобальных переменных
int a, b;
void change() {
int r;
r = a;
a = b;
b = r;
}
void main() {
cin >> a >> b;
change();
cout << a << " " << b;
}
Для глобальных переменных, так же как и для функций, можно использовать прототипы. Такое объявление отличается от обычного определения переменной тем, что под нее не выделяется память. Определение «знакомит» переменную с компилятором. При этом также указывается ее имя и тип. Поэтому определение является также и объявлением. Переменная может быть объявлена единожды, но определять ее можно сколько угодно раз, пока определение соответствует объявленным параметрам.
Переменная объявляется без ее определения, если перед ней указано ключевое слово extern. При этом extern не означает, что определение переменной должно находиться в другом файле. Это говорит только о том, что это не определение переменной, а ее объявление.
В большинстве случаев рекомендуется избегать глобальных переменных, хотя в некоторых случаях их использование значительно упрощает интерфейс функции. Многие глобальные переменные могут легко привести к тому, что код программы потеряет читаемость и гибкость. Передача данных между функциями должна реализовываться с помощью параметров. Если данные о длительности вызова функции требуется получить во время ее выполнения, используется локальная переменная.
