- •Лабораторная работа 3 Функции
- •Примеры вызовов функций
- •Демонстрация функции без аргументов и не возвращающей значения
- •Демонстрация функции, определенной перед ее вызовом
- •Демонстрация функции с аргументами и не возвращающей значения
- •Демонстрация использования глобальных переменных при обмене данными между функциями
- •Демонстрация использования в функции локальных статических переменных
- •Передача в функцию в качестве параметра переменных разных типов Функция вычисления минимального расстояния между точками плоскости
- •Функция вычисления факториала
- •Функция вычисления хn через умножение
- •Функция определения максимального и минимального из двух чисел
- •Функция с параметром перечисляемого типа
- •Функция, выделяющая целую и дробную части вещественного числа
- •Функция, возвращающая ссылку как результат своей работы
- •Демонстрация inline-функций
- •Демонстрация функции с параметрами по умолчанию
- •Перегрузка функций
- •Перегрузка функций с равным числом аргументов
- •Перегрузка функций с разным числом аргументов
- •Шаблоны семейства функций
- •Рекурсивные функции
- •Рекурсивная функция вычисления факториала
- •Рекурсивная функция вывода на печать символов строки в обратном порядке
- •Рекурсивная функция печати числа в виде строки символов
- •Вычисление нод через итерации и через рекурсивную функцию
- •Вычисление интеграла по методу правых прямоугольников
- •Использование одинаковых вызовов функции для вычисления интеграла разными методами и для разных функций
- •Использование при вычислении интеграла многофайловой компиляции
- •Вычисление корня нелинейного уравнения
- •Правила оформления и вызова функций
- •Элементы оптимизации работы с функциями
Функция, возвращающая ссылку как результат своей работы
int x; // глобальная переменная
int& setx(); // прототип функции
int main()
{ cout << "x=" << x << endl; // вывод значения глобальной переменной
setx() = 92; // функция вызывается из левой части оператора присваивания
cout << "x=" << x << endl; // вывод нового значения глобальной переменной
_getch();
return 0;
}
//--------------------------------------------------------------
int& setx()
{
return x; // возвращается ссылка на х
}
Результат работы:
x=0
x=92
Демонстрация inline-функций
inline double lbstokg (float pounds)
// функция конвертирует фунты в килограммы
{
return 0.453592 * pounds;
}
//--------------------------------------------------------------
int main()
{
float lbs;
cout << "\n Enter your weight in pounds: ";
cin >> lbs;
cout << "Your weight in kilograms is " << lbstokg (lbs)
<< endl;
_getch();
return 0;
}
Результаты работы
Enter your weight in pounds: 3.5
Your weight in kilograms is 1.58757
Демонстрация функции с параметрами по умолчанию
void repchar(char='*', int=45);
//прототип функции с параметрами по умолчанию
int main()
{
repchar(); //вызов функции с двумя аргументами по умолчанию
//печать 45 символов «звездочка»
repchar('='); //вызов функции с заданным первым аргументом
//печать 45 знаков «равно»
repchar('+', 30); //вызов функции с двумя заданными аргументами
//печать 30 знаков «плюс»
_getch();
return 0;
}
//--------------------------------------------------------------
void repchar(char ch, int n)
{
for(int j=0; j<n; j++)
cout << ch;
cout << endl;
}
Результаты работы:
*********************************************
=============================================
++++++++++++++++++++++++++++++
Перегрузка функций
В С++ можно определить с одним и тем же именем несколько функций, которые отличаются типами параметров и реже их количеством. Тогда говорят, что функции перегружены. Под перегрузкой понимается создание нескольких прототипов и определений функций, имеющих одинаковое имя.
Перегрузка функций с равным числом аргументов
Рассмотрим пример программы, в которой перегружаются две функции с равным числом аргументов и имеющие одинаковые имена. Первая функция int func (int a, int b) определяет сумму двух целых чисел a и b, вторая - float func (float a, float b) – разность двух чисел с плавающей точкой:
int func (int a, int b); //прототип функции вычисления суммы
float func (float a, float b); //прототип функции вычисления разности
//--------------------------------------------------------------
int main ()
{int a=25, b=40;
float c=2.45f, d=6.15f;
cout << "\n summa=" << func (a,b); //вызов функции с аргументами целого типа
cout << "\n raznost=" << func (c,d); //вызов функции с аргументами типа float
_getch();
return 0;
}
//--------------------------------------------------------------
int func(int a, int b) //определение функции вычисления суммы
{return (a+b);
}
//--------------------------------------------------------------
float func(float a, float b) //определение функции вычисления разности
{return (a-b);
}