C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
Справочное руководство. Определения Функций.
 
                  
                   10. Определения Функций

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


     Спецификаторы_описания register,  auto, typedef не могут
использоваться внутри описания класса  (#8.5),   а  friend  и
virtual могут использоваться только там.  Описатель функции -
это описатель "функции,  возвращающей ..."  (#8.4).Формальные
параметры находятся в области видимости самого внешнего блока
тела_функции. Описатели функции имеют вид


  описатель_функции:

      описатель ( список_описаний_параметров )


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


  Тело функции имеет вид


  тело_функции:
      составной_оператор


  Вот простой пример полного определения функции:


  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 ( список_параметров opt )

     Если в инициализаторе_члена дан идентификатор, то список
параметров используется   для инициализации названного члена;
если нет,  то список  параметров  используется  для  базового
класса. Например:

  struct base (* base(int); ... *);

  struct derived : base (*
      derived(int);
      base b;
      const c;
  *);


  derived::derived(int a) : (a+1), b(a+2), c(a+3)
  (* /* ... */ *)


  derived d(10);


      тело derived::derived()  (см. #8.5.5).
Порядок, в котором вызываются конструкторы для членов, не ус-
тановлен. Если базовый класс имеет конструктор, который можно
вызывать без параметров,  не надо давать никакой список пара-
метров. Если класс члена имеет конструктор, который можно вы-
зывать без параметров, для этого члена не надо давать никакой
список параметров.

[Назад] [Содержание] [Вперед]

Главная