Найти в Дзене

Функции C++. Часть 2

Оглавление

В данной статье будет рассмотрено:

  • Функции, определяемые пользователями
  • Форма функции
  • Заголовки функций
  • Использование определяемых пользователем функций, имеющих возвращаемое значение
  • Местоположение директивы using в программах с множеством функций

Здравствуй читатель, это 2 часть про функции в C++, и думаю даже не заключительная. И так, начнем.

Функции, определяемые пользователями

Нередко приходится писать собственные функции, в частности, при разработке классов. Я могу сказать, что конструировать собственные функции довольно интересно, и мы сейчас попробуем рассмотреть данный процесс. Давайте сначала рассмотрим пример программы:

*знак решетки*include <iostream>
void simon(int); // прототип функции simon()
int main()
{
setlocale(LC_ALL,"RU");
using namespace std;
simon(7); // вызов функции simon()
cout << "Выберите целое число: ";
int count;
cin >> count;
simon(count) // вызов функции simon()
cout << "Готово!\n";
return 0;
)
void simon(int n) // определение функции simon()
{
using namespace std;
cout << "Саймон говорит тебе нужно дотронуться до кончика носа " << n << " раз(-а)\n"
}

Результат в консоли таков:

Саймон говорит тебе нужно дотронуться до кончика носа 7 раз(-а)
Выберите целое число: 666
Саймон говорит тебе нужно дотронуться до кончика носа 666 раз(-а)
Готово!

Напомню, что если вы забыли, что такое прототип функции и определение функции загляните в мою 1 часть по функциями - ссылка. Продолжаем, я предположил что нужно добавить еще одну функцию, которая определяется пользователем. Мы должна предоставить прототип функции перед ее использованием, обычно прототипы пишет выше функции main(). А теперь разберу, что делает сама программа, функция main() вызывает функцию simon() 2 раза:

1 раз - с аргументом 7

2 раз - с аргументом-переменной count

Между этими вызовами пользователь вводит целое число, которое присваивается переменной count.

Форма функции

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

тип имя_функции(список_аргументов)
{
операторы;
}

Заголовки функций

Функция simon() имеет такой заголовок:

void simon(int n)

Void означает, что функция simon() не имеет возвращаемого значения. Таким образом, первый вызов функции имеет вид:

simon(3);

Но так как присутствует void, simon() не возвращает значения и ее нельзя использовать таким образом:

simple = simon(3); // не допускается

Int n в скобках означает, что функция simon() будет вызываться с 1 аргументом типа int. В данном случае n - это новая переменная, которой присвоили значение переданное во время вызова функции. То есть ей присваивается значение 3.

Когда оператор cout в теле функции использует переменную n, он имеет дело со значением, переданным при вызове функции. В результате вызова simon(count) на экране будет отображено значение 666, поскольку это значение было введено для переменной count. Заголовок simon() сообщает о том, что эта функция принимает один аргумент int и не имеет возвращаемого значения. Функции, которые имеют возвращаемые значения, должны использовать ключевое слово return для передачи возвращаемого значения и завершения функции. Хочу сказать о том, что функцию int main() может вызывать ОС(Операционная система). Поэтому возвращаемое функцией main() значение передается не в другую часть программы, а в ОС.

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

Рассмотрим такую программу:

*знак решетки*include <iostream>
int stonelib(int); // прототип функции
int main()
{
setlocale(LC_ALL,"RU");
using namespace std;
int stone
cout << "Введите вес в стоунах: ";
cin >> stone;
int pounds = stonetolb(stone);
cout << stone << " стоун(-ов) = ";
cout << pounds << " фунт(-ов).\n"
return 0;
}
int stonetolb(int sts)
{
return 14 * sts;
}

Результат данной программы:

Введите вес в стоунах: 15
15 стоун(-ов) = 210 фунт(-ов)

Данная программа переводит стоуны в фунты.
В функции main() программа используется объект cin для ввода значения целочисленной переменной stone. Это значение передается функции stonetolb() в качестве аргумента и присваивается переменной sts в этой функции. Функция stonetolb() используется ключевое слово return для возврата значения 14*sts в функцию main(). Это как раз пример того, что после оператор return не обязательно должно следовать просто число. Как можно было видеть в приведенных примерах, прототип функции описывает ее интерфейс, по-другому способ взаимодействия функции с остальной частью программы. Список аргументов показывает, какой тип информации передается функции, а тип функции указывает на тип возвращаемого ею значения.

Местоположение директивы using в программах с множеством функций

В приведенных мной примерах директива using присутствует в каждом примере. Это объясняется тем, что каждая функция использует объект cout и потому должна иметь доступ к определению cout в пространстве std. (Если не знаете, что это такое то прочитайте мою первую статью - ссылка). Еще один способ сделать пространство имен std доступным для обеих функций - это размещение директивы за пределами функций(перед ними), там где и заголовочные файлы. Предпочтительней поступать так, что у всех функция был доступ к пространству имен.

Конец

Спасибо если вы дочитали до этого текста. Я пытался изложить понятно. Дайте знать если вы открыли для себя что-то новое или что-то поняли. Советую прочитать 1 часть про функции в С++, если вы не знаете некоторые термины, ссылки ниже.

Моя самая первая статья - ссылка
Моя вторая статья -
ссылка
Моя статья про функции(часть 1) -
ссылка
Спасибо за прочтение, до свидания