Определения функций
Определения функций имеют вид
определение_функции: спецификаторы_описания описатель_функции opt инициализа- тор_базового_класса opt тело_функции
Единственными спецификаторами класса памяти (sc-спецификаторами), допустимыми среди спецификаторов описания, являются extern, static, overload, inline и virtual. Описатель функции похож на описатель "функции, возвращающей ...", за исключением того, что он включает в себя имена формальных параметров определяемой функции. Описатель функции имеет вид
описатель_функции: описатель ( список_описаний_параметров )
Форма списка описаний параметров определена в . Единственный класс памяти, который может быть задан, это тот, при котором соответствующий фактический параметр будет скопирован, если это возможно, в регистр при входе в функцию. Если в качестве инициализатора для параметра задано константное выражение, то это значение используется как значение параметра по умолчанию.
Тело функции имеет вид
тело_функции: составной_оператор
Вот простой пример полного определения функции:
int max (int a,int b,int c) { int m = (a b) ? a : b; return (m c) ? m : c; }
Здесь int является спецификатором типа ; max (int a, int b, int c) является описателем функции ; { ... } - блок, задающий текст программы (код) оператора.
Поскольку в контексте выражения имя (точнее, имя как формальный параметр) считается означающим указатель на первый элемент массива, то описания формальных параметров, описанных как "массив из ...", корректируются так, чтобы читалось "указатель на ...".
Инициализатор базового класса имеет вид
инициализатор_базового_класса: : ( список_параметров opt )
Он используется для задания параметров конструктора базового класса в конструкторе производного класса. Например:
struct base { base (int); ... }; struct derived : base { derived (int); ... };
derived.derived (int a) : (a+1) { ... }
derived d (10);
Конструктор базового класса вызывается для объекта d с параметром 11.