Введение в язык Си++

Определения Функций


Каждая функция, вызываемая в программе, должна быть где-то определена (только один раз). Определение функции - это описание функции, в котором приводится тело функции. Например:

extern void swap(int*, int*); // описание

void swap(int*, int*) // определение { int t = *p; *p =*q; *q = t; }

Чтобы избежать расходов на вызов функции, функцию можно описать как inline (), а чтобы обеспечить более быстрый доступ к параметрам, их можно описать как register (). Оба средства могут использоваться неправильно, и их следует избегать везде где есть какие-либо сомнения в их полезности.


Определения функций имеют вид

определение_функции: спецификаторы_описания описатель_функции opt инициализатор_базового_класса opt тело_функции

Единственными cпецификаторами класса памяти (sc-cпецификаторами), допустимыми среди спецификаторов описания, являются 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.



Содержание раздела