Программирование. Принципы и практика использования C++ Исправленное издание, стр. 53
4.5.1. Зачем нужны функции
• Эти вычисления логически отделены от других.
• Отделение вычислений делает программу яснее (с помощью присваивания имен функциям).
• Функцию можно использовать в разных местах программы.
• Использование функций упрощает отладку программы.
В дальнейшем мы увидим много примеров, в которых следует руководствоваться этими соображениями. Обратите внимание на то, что в реальных программах используются тысячи функций и даже несколько сотен тысяч функций. Очевидно, что мы никогда не сможем понять такие программы, если их части (т.е. фрагменты вычислений) не будут отделены друг от друга и не получат имен. Кроме того, как мы вскоре убедимся, многие функции часто оказываются полезными в разных ситуациях, и повторять один и тот же код каждый раз довольно утомительно. Например, вы, конечно, можете писать выражения вида
x*x7*7(x+7)*(x+7)square(x)square(7)square(x+7)sqrtsqrt(x)sqrt(7)sqrt(x+7)sqrt(x)xВ разделе 8.5 мы рассмотрим множество технических деталей, связанных с функциями, а пока рассмотрим еще один пример. Если мы хотим действительно упростить цикл в функции
main()void print_square(int v){ cout << v << '\t' << v*v << '\n';}int main(){ for (int i = 0; i<100; ++i) print_square(i);}Почему же мы не использовали версию программы на основе функции
print_square()square()• функция
print_square()square()• функция
square()print_square()Функция
print_square()• печатает числа;
• вычисляет квадраты.
Программы легче писать и понимать, если каждая функция выполняет отдельное логическое действие. По этой причине функция
square()В заключение попробуем ответить, почему мы использовали функцию
square(i)i*ii*iПОПРОБУЙТЕ
Реализуйте функцию
square()x*xхxsquare()4.5.2. Объявления функций
Вы заметили, что вся информация, необходимая для вызова функции, содержится в первой строке ее объявления? Рассмотрим пример.
int square(int x)Этой строки уже достаточно, чтобы написать инструкцию
int x = square(44);На самом деле нам не обязательно заглядывать в тело функции. В реальных программах мы часто не хотим углубляться в детали реализации тела функции. Зачем нам знать, что написано в теле стандартной функции
sqrt()square()int square(int); // объявление функции squaredouble sqrt(double); // объявление функции sqrtОбратите внимание на завершающие точку с запятой. Они используются в объявлении функции вместо ее тела, заданного в определении.
int square(int x) // определение функции square{ return x*x;}Итак, если мы хотим просто использовать функцию, то достаточно написать ее объявление, а чаще — выполнить директиву
#include