- •Int main()
- •Int main() {
- •Int main ()
- •Int main()
- •Использование функций в выражениях
- •Int main()
- •Правила действия областей видимости функций
- •Локальная область видимости
- •Void f1() ;
- •Int main() {
- •Void f1 ()
- •Void f( ) ;
- •Int main( )
- •Void f()
- •Локальные переменные можно объявлять внутри любого блока
- •Int main() {
- •Int main( )
- •Сокрытие имен переменных
- •Int main ()
- •Параметры функции
- •Глобальная область видимости
- •Int main ()
- •Int main ()
ФУНКЦИИ В С++
Описание функции. Создание функции. Вызов функции.
Все С++ - функции имеют общий формат:
тип_возвращаемого_значения имя (список_параметров)
{
. . . // Тело функции
}
// Описание в списке параметров
float myfunc(float a, float b, int с)
{ float k;
if (a < b)
k = b;
else
k = a;
return k*с;
}
Рассмотрим простой пример, который содержит две функции: main() и myfunc()
/* Эта программа содержит две функции: main() и myfunc() */
#include <iostream>
float myfunc(float a, float b, int с);
// Прототип функции myfunc()
int main()
{std::
cout << "В функции main().\n";
float a = 2.5;
float b = 3.6;
int c = 2;
float s;
s = myfunc(a,b,c); // Вызываем функцию myfunc()
cout << "Снова в функции main().\n";
return 0; }
// Определение функции myfunc().
float myfunc(float a, float b, int с)
{
float k;
if (a < b)
k = b;
else
k = a;
return k*с;
}
Программа работает следующим образом:
Вызывается функция main() и выполняется ее первая сout-инструкция.
Объявляются и инициализируются переменные a, b, c и объявляется переменная s.
Из функции main() вызывается функция myfunc() и ей передаются переменные a, b, c в качестве аргументов.
Функция myfunc() выполняет свои инструкции, а возвращаемое из функции значение присваивается переменной s.
Затем после выхода из функции передается управление назад функции main(): той строке кода, которая расположена непосредственно за вызовом функции.
Наконец, функция main() выполняет свою вторую cout-инструкцию, которая завершает всю программу.
В общем случае, чтобы вызвать функцию, достаточно указать ее имя с парой круглых скобок. После вызова управление программой переходит к функции. Выполнение функции продолжается до обнаружения закрывающей фигурной скобки. Когда функция завершается, управление передается инициатору ее вызова.
В этой программе инструкция float myfunc (float a, float b, int с); — прототип функции myfunc().
Прототип функции объявляет функцию до ее определения. Прототип позволяет компилятору узнать тип значения, возвращаемого этой функцией, а также количество и тип параметров, которые она может иметь. Компилятору нужно знать эту информацию до первого вызова функции. Поэтому прототип располагается до функции main(). Единственной функцией, которая не требует прототипа, является main(), поскольку она встроена в язык C++.
В C++ функции, не возвращающие значений, объявляются с использованием ключевого слова void.
Использование аргументов
Функции можно передать одно или несколько значений. Значение, передаваемое функции, называется аргументом. Т.о., аргументы представляют собой средство передачи инициализации в функцию.
При создании функции, которая принимает один или несколько аргументов, необходимо объявить переменные, которые получат значения этих аргументов. Эти переменные называются параметрами функции.
Рассмотрим пример определения функции box с тремя параметрами, которая вычисляет объем параллелепипеда и отображает полученный результат.
void box(int length, int width, int height)
{
cout << "Объем параллелепипеда равен" << length*width*height << "\n";
}
В общем случае при каждом вызове функции box будет вычислен объем параллелепипеда путем умножения значений, переданных ее параметрам length, width и height.
Объявлены эти параметры в виде списка, заключенного в круглые скобки, расположенные после имени функции. Объявление каждого параметра отделяется от следующего запятой. Так объявляются параметры для всех функций (если они их используют).
При вызове функции необходимо указать три аргумента. Например:
box(7,20,4);
box (50,3,2};
Каждый из аргументов копируется в соответствующий параметр. Так, при первом вызове функции box() число 7 копируется в параметр length, 20 –в параметр width, a 4 — в параметр height.
Использование функции box демонстрируется в следующей программе .
//Программа демонстрации использования функции box
#include <iostream>
void box(int length, int width, int height);// Прототип
//функции box
Int main()
{
box(7, 20, 4); // Передача аргументов функции box
box (50, 3, 2);
box (8, 6, 9);
return 0;
}
// Вычисление объема параллелепипеда.
void box(int length, int width, int height) /*Параметры принимают значения аргументов, переданных функции box*/
{
cout << "Объем параллелепипеда равен "
<< length * width * height << "\n"; }
При выполнении программа генерирует такие результаты.
Объем параллелепипеда равен 560
Объем параллелепипеда равен 300
Объем параллелепипеда равен 432
Примечание.
Термин аргумент относится к значению, которое используется при вызове функции.
Переменная, которая принимает значение аргумента, называется параметром. Функции, принимающие аргументы, называются параметризованными.
Использование инструкции return
Инструкция return имеет две формы применения:
первая позволяет возвращать значение
вторая — нет
Версия инструкции return, которая не возвращает значение
Если тип значения, возвращаемого функцией, определяется ключевым словом void (т.е. функция не возвращает значения вообще), то для выхода из функции достаточно использовать такую форму инструкции return:
return;
При обнаружении инструкции return управление программой немедленно передается инициатору ее вызова. Любой код в функции, расположенный за инструкцией return, игнорируется.
Рассмотрим пример.
// Использование инструкции return
#include <iostream>
void f() ;
Int main() {
cout << "До вызова функции.\n";
f();
cout << "После вызова функции.\n";
return 0; }
// Определение void-функции, которая использует инструкцию return.
void f()
{
cout << "В функции f().\n";
return; // Немедленное возвращение к инициатору вызова
// без выполнения следующей cout-инструкции
cout <<"Этот текст не будет отображен. \n";
}
Вот как выглядят результаты выполнения этой программы.
До вызова функции.
В функции f().
После вызова функции.
Функция может содержать несколько инструкций return. В этом случае возврат из функции будет выполнен при обнаружении одной из них.
float myfunc(float a, float b, int с)
{
if (a < b)
return b*c;
else
return a*с;
}
Однако следует иметь в виду, что слишком большое количество инструкций return может ухудшить ясность алгоритма и ввести в заблуждение тех, кто будет в нем разбираться. Несколько инструкций return стоит использовать только в том случае, если они способствуют ясности функции.
Версия инструкции return, которая возвращает значение
Функция может возвращать значение инициатору своего вызова. Таким образом, возвращаемое функцией значение — это средство получения информации из функции. Для возврата функцией значения используется вторая форма инструкции return.
return значение;
Эту форму инструкции return нельзя использовать с void-функциями.
Важно!!! Функция, которая возвращает значение, должна определить тип этого значения. Тип возвращаемого значения должен быть совместимым с типом данных, используемых в инструкции return. В противном случае неминуема ошибка во время компиляции программы. Функция может возвращать данные любого допустимого в C++ типа, за исключением массива.!!!
Чтобы проиллюстрировать процесс возврата функцией значений, перепишем уже известную функцию box. В этой версии функция box возвращает объем параллелепипеда: переменной answer, расположенной с левой стороны, присваивается значение, возвращаемое функцией.
// Возврат значения.
#include <iostream>
int box(int length, int width, int height); // Функция
// возвращает объем параллелепипеда.