Функции в языке С++ используются для названия и представления вычислений и действий. Объявление функции состоит из типа возвращаемого значения, за которым следует имя функции и список формальных аргументов. Рассмотрим пример.
double fct(int a, double d); // объявление функции fct (без тела)
double fct(int a, double d) { return a*d; } // объявление функции fct
Определение состоит из тела функции (инструкций, выполняемых при ее вызове), в то время как объявление, не являющееся определением, просто завершается точкой с запятой. Формальные аргументы часто называют
int current_power; // функция current_power не имеет аргументов
Если хотите, чтобы функция не возвращала никаких значений, укажите вместо типа возвращаемого значения ключевое слово void
void increase_power(int level); // функция increase_power
// ничего не возвращает
Здесь ключевое слово void
// поиск строки s в векторе vs;
// vs[hint] может быть подходящим местом для начала поиска
// возвращает индекс найденного совпадения; –1 означает "не найдена"
int my_find(vector
// аргументы
int my_find(vector
my_find
Как правило, все аргументы в объявлении имеют имена. Рассмотрим пример.
int my_find(vector
// поиск строки s в векторе vs, начиная с позиции hint
{
if (hint<0 || vs.size<=hint) hint = 0;
for (int i = hint; i
// с позиции hint
if (vs[i]==s) return i;
if (0
for (int i = 0; i
if (vs[i]==s) return i;
}
return –1;
}
Переменная hint
my_find
, а затем выяснили, что пользователи редко используют переменную hint
, так что она лишь снижает производительность программы. В таком случае переменная hint
больше не нужна, но за пределами нашего фрагмента есть множество вызовов функции my_find
с аргументом hint
. Переписывать код мы не хотим (или не можем), поэтому изменять объявления функции my_find
не будем. Вместо этого мы просто не будем использовать последний аргумент. Поскольку мы его не используем, оставим его без имени.int my_find(vector
// не используется
{
for (int i = 0; i
if (vs[i]==s) return i;
return –1;
}
Полная грамматика объявлений функций изложена в книге
8.5.2. Возврат значения
Функция возвращает вычисленное значение с помощью инструкции return
T f // функция f возвращает объект класса T
{
V v;
// ...
return v;
}
T x = f;
Здесь возвращаемое значение — это именно то значение, которые мы получили бы при инициализации переменной типа T
V
.V v;
// ...
T t(v); // инициализируем переменную t значением v
Таким образом, возвращаемое значение — это форма инициализации. Функция, объявившая возвращение значения, должна его возвращать. Например, в следующем фрагменте возникает ошибка:
double my_abs(int x) // предупреждение: этот код содержит ошибки
{
if (x < 0)
return –x;
else if (x > 0)
return x;
} // ошибка: если х равно нулю, функция ничего не возвращает