Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс_ред.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.76 Mб
Скачать

Возвращаемые значения

Самый простой способ обмена данными с функциями — использование возвращаемого значения. Функции, которые имеют возвращаемые значения, могут быть использованы в арифметических выражениях, как и любые переменные. Аналогично переменным возвращаемые значения обладают типом.

Например, можно описать функцию с именем getString(), возвращаемое значение которой будет иметь тип string, и использовать ее в своей программе:

string myString;

myString = getString();

Аналогично можно описать функцию с именем getVal(), которая будет возвращать значение типа double, и использовать ее в математическом выражении:

double myVal;

double multiplier = 5.3;

myVal = getVal() * multiplier;

Если функция должна обладать возвращаемым значением, то необходимо внести два изменения:

  • В описании функции вместо ключевого слова void указать тип возвращаемого значения.

  • По завершении всех вычислений в функции использовать ключевое слово return и передать возвращаемое значение вызывающей функции.

Синтаксис кода для рассматриваемого типа функций консольного приложения будет выглядеть следующим образом:

static <возвращаемыйТип> <имяФункции>()

{

. . .

return <возвращаемоеЗначение>;

}

Единственным ограничением в данном случае является требование, гласящее, что <возвращаемоеЗначение> должно иметь тип <возвраща­емыйТип> или же должна существовать возможность его неявного преобразования в этот тип. Вообще говоря, <возвращаемыйТип> может быть любым, включая самые сложные типы данных.

В простейшем случае это может выглядеть следующим образом:

static double getVal()

{

return 3.2;

}

Однако в реальной жизни возвращаемые значения обычно являются продуктом выполняемых функцией некоторых вычислений, поскольку возврат постоянного значения обычно не имеет смысла.

Когда при выполнении программы достигается оператор return, управление немедленно передается обратно в вызывающий код. Никакие строки кода после этого оператора выполняться не будут. Отсюда, однако, совершенно не следует, что в теле функции оператор return обязательно должен быть последним. Он может быть использован и раньше, например, при ветвлении по какому-либо условию. Включение оператора return в цикл for, в блок if или в какую-нибудь другую структуру приведет к немедленному окончанию выполнения как этой структуры, так и всей функции в целом. Например:

static double getVal()

{

double checkVal;

// присваивание переменной checkVal некоторого значения,

// полученного в результате некоторых вычислений.

if (checkVal < 5)

return 4.7;

return 3.2;

}

В данном случае будет возвращено одно из двух значений — в зависимости от значения переменной checkVal.

Имеется единственное ограничение: оператор return должен выполняться до того, как будет достигнута закрывающая фигурная скобка } данной функции. Следующий код является недопустимым:

static double getVal()

{

double checkVal;

// присваивание переменной checkVal значения,

// полученного в результате некоторых вычислений.

if (checkVal < 5)

return 4.7;

}

Если checkVal >= 5, то не встретится ни одного оператора return, а это запрещено. Все ветви должны оканчиваться этим оператором.

И последнее замечание: оператор return может применяться в функциях, объявленных с использованием ключевого слова void (у них отсутствует какое-либо возвращаемое значение). В таких случаях функция просто прекращает работу. Поэтому при использовании оператора return будет ошибкой размещать возвращаемое значение между ключевым словом return и следующей за ним точкой с запятой.