Функции

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

заголовок_функции
  {
   инструкции
  }

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

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

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

Определение функции должно точно соответствовать ее объявлению. Каждая объявленная функция должна быть определена.

Пример:

double                       // тип возвращаемого значения
linfunc (double a, double b) // имя функции и список параметров
  {
                             // составной оператор
   return (a + b);           // возвращаемое значение
  }

 

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

Функция, которая не возвращает значения, должна быть описана как имеющая тип void.

Пример:

void errmesg(string s)
  {
   Print("error: "+s);
  }

 

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

Пример:

int somefunc(double a,
             double d=0.0001,
             int n=5,
             bool b=true,
             string s="passed string")
  {
   Print("Обязательный параметр a= ",a);
   Print("Переданы следующие параметры: d = ",d," n = ",n," b = ",b," s = ",s);
   return(0);
  }

 

Если какому-либо параметру было назначено умолчательное значение, то все последующие параметры также должны иметь умолчательное значение.

Пример неправильного объявления:

int somefunc(double a,
             double d=0.0001,    // объявлено значение по умолчанию 0.0001
             int n,              // значение по умолчанию не указано !
             bool b,             // значение по умолчанию не указано !
             string s="passed string")
  {                                          
  }      

Смотри также

Перегрузка, Виртуальные функции, Полиморфизм