246___________________________ Часть II. Программирование на C++

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

Синтаксис функций

C++ известен как язык строго типизированный. В данном случае это означает, что следует внимательно относиться к объявлениям и определениям функций: в именах функций существенны все детали — и написание, и регистр символов. В этом разделе мы рассмотрим синтаксис функций в общем, а частные случаи будем изучать далее на протяжении всей главы.

Сначала давайте договоримся о терминологий. Термин объявление функции (function declaration) относится к ее интерфейсу. Интерфейс — это "вид функции снаружи", все, что не касается ее устройства. Объявление функции — это оператор, включающий в себя тип возвращаемого значения, имя функции, ее параметры и заканчивающийся точкой с запятой. Определение функции (function definition) состоит из интерфейса и тела функции (разница между объявлением и определением будет показана позже на примерах).

Строгая типизированность C++ подразумевает, в частности, то обстоятельство, что объявление функции должно предшествовать ее определению или первому употреблению (см. также следующий раздел). Кроме того, определение и использование функции должны соответствовать ее объявлению.

Объявление функции в наиболее обшей форме синтаксически выглядит так:

return_type func_name( [arg_type argi [,arg_type arg2 ^[, arg_type arg3, ...]]•]);

т. е. оператор

void Foo () ;

объявляет функцию с именем Foo, возвращающую void (ничего), не принимающую аргументов. Квадратные скобки указывают, что аргументы не обязательны, а многоточие означает, что количество аргументов может быть произвольным.

Замечание

¦Не путайте многоточие в этой синтаксической формуле с многоточием, обозначающим список аргументов переменной длины. Об этих списках подробнее рассказано в разделе "Типы аргументов".

Написание курсивом подчеркивает, что имена и обозначения условные. return_type можно заменить любым базовым или производным типом. Саму функцию можно при желании назвать и func_name, но это не лучший ва-