Листинг 3.4. Версия функции МахЗ, использующая условную операцию
Лабораторная работа 4.
Функции
Функция — это группа операторов, объединенных общим именем. При вызове функции она выполняется и возвращает значение вызывающему приложению.
Синтаксис объявления функции в C++ выглядит следующим образом:
возвращаемый_тип имя_функции(список_параметров)
{
тело функции
}
Как показано ниже, между объявлениями функций в Delphi и в C++ существует несколько различий:
■ Возвращаемый тип указывают перед именем функции, а не после имени функции и списка параметров, как в Delphi.
■ Символы точки с запятой после имени функции и после списка параметров, если таковой имеется, отсутствуют.
В языке C++ понятие процедур, подобных процедурам Delphi, отсутствует. В C++ можно создавать только функции, однако если они не возвращают никаких значений, то они работают подобно процедурам Delphi. Чтобы функция не возвращала никаких значений, достаточно ее объявить как возвращающую тип данных void. Это специальный тип данных, используемый для указания на отсутствие какого-либо значения. Пример кода, представленный в листинге 3.1, демонстрирует создание и использование простой процедуры (точнее, функции типа void) в C++.
Листинг 3.1. Простая процедура
#include <conio.h>
#include <iostream>
using namespace std;
void hello()
{
cout << "Hello from a C++ procedure." << endl;
}
int main(int argc, char* argv[])
{
hello(); // вызов процедуры hello()
getch ();
return 0;
}
При объявлении и вызове функции в C++ круглые скобки необходимо использовать, даже если функция не принимает параметры.
Параметры
Список параметров – наилучший механизм передачи значений функциям. В C++ параметры в списке необходимо разделять запятыми:
возвращаемый_тип имя_функции(тип_данных первый_параметр, тип_данных последний_параметр)
{
тело функции
}
В листинге 3.2 содержится код простой функции add, которая принимает два целочисленных значения и возвращает их сумму.
Листинг 3.2. Простая функция
#include <conio.h>
#include <iostream>
using namespace std;
int add(int first, int second)
{
return first + second;
}
int main(int argc, char* argv[])
{
int i, j , sum;
cout << "Первое число: ";
cin >> i;
cout << "Второе число: ";
cin >> j;
sum = add(i, j); // вызов функции add(int, int)
cout << "Сумма = " << sum << endl;
getch ();
return 0;
}
В C++ для возврата значения из функции применяется зарезервированное слово return. Однако при этом следует быть очень внимательным, поскольку зарезервированное слово return прерывает выполнение и приводит к немедленному выходу из функции, возвращая вызывающей функции выражение, указанное после него. Поэтому любые последующие строки кода функции выполняться не будут.
Например, листинг 3.3 содержит код функции МахЗ, реализованной в С++. Она имеет две особенности: в функции необходимо объявить переменную для временного хранения максимального значения, и после всех остальных операторов использовать зарезервированное слово return для возврата значения вызывающей функции.
Листинг 3.3. Функции МахЗ
#include <conio.h>
#include <iostream>
using namespace std;
#pragma hdrstop
int max3(int numl, int num2, int num3)
{
int max_val = numl; // numl - максимальное значение?
if(num2 > max_val)
max_val = num2; // num2 - максимальное значение?
if(num3 > max_val)
max_val = num3; // num3 - максимальное значение
return max_val;
}
#pragma argsused
int main(int argc, char* argv[])
{
cout << "Максимальное значение = " << max3(5, 2, 3) << endl;
getch ();
return 0;
}
Существует и другой способ реализации функции МахЗ — с помощью условной. Листинг 3.4 содержит версию функции МахЗ.
Листинг 3.4. Версия функции МахЗ, использующая условную операцию
#include <conio.h>
#include <iostream>
using namespace std;
int max3(int num1, int num2, int num3)
{
int max_val = num1 > num2 ? num1 : num2;
return num3 > max_val ? num3 : max_val;
}
int main(int argc, char* argv[])
{
cout << "Максимальное значение = " << max3(10, 20, 30) << endl;
getch();
return 0;
}