Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Страустрап Б. Весь текст 579.17 Kb

Язык С++

Предыдущая страница Следующая страница
1 ... 40 41 42 43 44 45 46  47 48 49 50
  Например:

  overload abs;
  int abs (int);
  double abs (double);

  Когда  вызывается  перегруженное  имя,  по  порядку  производится
сканирование списка  функций для нахождения той, которая может быть
вызвана. Например,  abs(12) вызывает  abs(int), а  abs(12.0)  будет
вызывать abs(double). Если бы был зарезервирован порядок вызова, то
оба обращения вызвали бы abs(double).
  Если   в   случае   вызова   перегруженного   имени   с   помощью
вышеуказанного метода  не найдено  ниодной функции,  и если функция
получает параметр типа класса, то констукторы классов параметров (в
этом случае существует единственный  набор преобразований, делающий
вызов допустимым) применяются неявным образом. Например:

  class X { ... X (int); };
  class Y { ... Y (int); };
  class Z { ... Z (char*); };

  overload int f (X), f (Y);
  overload int g (X), g (Y);

  f (1);        /* неверно: неоднозначность f(X(1)) или f(Y(1)) */
  g (1);        /* g(X(1))                              */
  g ("asdf");   /* g(Z("asdf"))                         */

                             - стр 297 -

  Все    имена    функций    операций    являются    автомаатически
перегруженными.

     8.10 Описание перечисления

  Перечисления являются int с именованными константами.
     enum_спецификатор:
          enum    идентификатор     opt     {     enum_список     }

     enum_список:
          перечислитель
          enum_список,                                перечислитель

     перечислитель:
          идентификатор
          идентификатор = константное_выражение
  Идентификаторы  в  enum-списке  описаны  как  константы  и  могут
появляться  во  всех  местах,  где  требуются  константы.  Если  не
появляется  ни   одного  перечислителя   с  =,   то  значения  всех
соответствующих констант  начинаются с  0 и возрастают на 1 по мере
чтения   описания   слева   нарпаво.   Перечислитель   с   =   дает
ассоциированному   с   ним   идентификатору   указанное   значение;
последующие идентификаторы  продолжают прогрессию  от присвоеннного
зеначения.
  Имена  перечислителей  должны  быть  отличными  от  имен  обычных
переменных. Значения  перечислителей  не  обязательно  должны  быть
различными.
  Роль     идентификатора      в     спецификаторе     перечисления
enum_спецификатор  полностью   аналогична  роли  имени  класса;  он
именует определенный нутератор. Например:

  enum color { chartreuse, burgundy, claret=20, winedark };
    ...
    color *cp, col;
    ...
    col = claret;
    cp = &col;
    ...
    if (*cp == burgundy) ...

делает color  именем типа,описывающего  различные  цвета,  и  затем
описывает cp как указатель на объект этого типа. Возможные значения
извлекаются из множества { 0, 1, 20, 21 }.

     8.11 Описание Asm

  Описание Asm имеет вид
    asm (строка);
  Смысл описания  asm  неопределен.  Обычно  оно  используется  для
передачи информации ассемблеру через компилятор.

                             - стр 298 -


                        9. ОПЕРАТОРЫ

  Операторы выполняются последовательно во всех случаях кроме особо
оговоренных.

     9.1 Оператор выражение

  Большинство операторов  является операторами  выражение,  которые
имеют вид
     выражение ;
  Обычно операторы  выражение являются  присваиваниями  и  вызовами
функций.

     9.2 Составной оператор, или блок

  Составной оператор  (называемый также  "блок", что  эквивалентно)
дает возможность использовать несколько операторов в том месте, где
предполагается использование одного:
     составной_оператор:
          { список_описаний opt список_операторов opt }
     список_описаний:
          описание
          описание список_описаний
     список_операторов:
          оператор
          оператор список_операторов
  Если какой-либо  из идентификаторов  в списке_описаний  был ранее
описан, то  внешенее описание  выталкивается  на  время  выполнения
блока, и снова входит в силу по его окончании.
  Каждая инициализиция  auto или   register переменных производится
всякий раз при входе в голову блока. В блок делать передачу; в этом
случае  инициализации  не  выполняются.  Инициализации  переменных,
имеющих класс памяти static (#4.2) осуществляются только один раз в
начале выполнения программы.

     9.3 Условный оператор

  Есть два вида условных операторов
     if ( выражение ) оператор
     if ( выражение ) оператор else оператор
  В обоих  случаях вычисляется  выражение, и  если оно  не ноль, то
выполняется первый подоператор. Во втором случае второй подоператор
выполняется, если  выражение есть  0. Как  обычно,  неоднозначность
"else"  разрешается   посредством  того,  что  else  связывается  с
последним встречнным if, не имеющим else.

     9.4 Оператор while

  Оператор while имеет вид
     while ( выражение ) оператор

                             - стр 299 -

  Выполнение   подоператора повторяется,  пока  значение  выражения
остается ненулевым.  Проверка выполняется  передкаждым  выполнением
оператора.

     9.5 Оператор do

  Оператор do имеет вид
     do оператор while (выражение);
   Выполнение   подоператора  повторяется до тех пор, пока значение
выражения не  станет  нулем.  Проверка  выполняется  после  каждого
выполнения оператора.

     9.6 Оператор for

  Оператор for имеет вид
     for (  выражение_1 opt  ; выражение_2  opt ; выражение_3 opt )
          оператор
   Этот оператор эквивалентен следующему:

                             - стр 300 -

     выражение_1;
     while                                            (выражение_2)
                                                                  {
                                                           оператор
                                                       выражение_3;
       }
  Первое выражение  задает инициализацию  цикла;  второе  выражение
задает осуществляемую  перед каждой  итерацией проверку, по которой
производится выход  из  цикла,  если  выражение  становится  нулем;
третье выражение  часто задает приращение, выполняемое после каждой
итерации.
  Каждое  или   все  выражения   могут  быть   опущены.  Отсутствие
выражения_2 делает  подразумеваемое while-предложение  эквивалентым
while(1);  остальные  опущенные  выражения  просто  пропускаются  в
описанном выше расширении.

     9.7 Оператор switch

  Оператор  switch   вызывает  передачу   управления  на   один  из
нескольких операторов в зависимости от значения выражения. Он имеет
вид
     switch ( выражение ) оператор
   Выражение  должно быть  целого типа  или типа  указателя.  Любой
оператор внутри  оператора  может  быть  помечен  одним  или  более
префиксом case следующим образом:
     case      константное_выражение :
где константное  выражение должно иметь тот же тип что и выоажение-
переключатель; производятся  обычные арифметические преобразования.
В одном операторе switch никакие две константы, помеченные case, не
могут  иметь   одинаковое  значение.  Константные  выражения  точно
определяются в #15.
  Может также быть не более чем один префикс оператора вида
     default :
  Когда  выполнен   оператор  switch,   проведено  вычисление   его
выражения и  сравнение его  с каждой  case константой. Если одна из
констант равна  значению выражения,  то  управление  передается  на
выражение, следующее  за подошедшим  префиксом case.  Если  никакая
case константа  не соответствует выражению, и есть префикс default,
то управление  передается на  выражение, которому  он предшествует.
Если нет  соответсвующих вариантов  case  и default отсутствует, то
никакой из операторов в операторе switch не выполняется.
  Префиксы  case    и  default  сами  по  себе  не  изменяют  поток
управления, который  после задерки  идет дальше, перескакивая через
эти префиксы. Для выхода из switch см. break, #9.8.
  Обычно зависящий  от switch оператор является составным. В голове
этого   оператора   могут   стоять   описания,   но   инициализации
автоматических и регистровых переменных являются безрезультатными.

     9.8 Оператор break

  Оператор
     break ;

                             - стр 301 -

прекращает выполнение  ближайшего охватывающего while,  do, for или
switch   оператора; управление передается на оператор, следующий за
законченным.

     9.9 Оператор continue

  Оператор
  continue ;
вызывает передачу  управления  на  управляющую  продолжением  цикла
часть наименьшего  охватывающего оператора  while, do  или for;  то
есть на конец петли цикла. Точнее, в каждом из операторов

  while (...)         do                  for (...)
    {                   {                   {
      ...                 ...                 ...
      contin:;            contin:;            contin:;
    }                   }                   }
                      while (...);

continue эквивалентно  goto  contin.  (За  contin:  следует  пустой
оператор, #9.13.)

     9.10 Оператор return

  Возврат из  функции  в  вызывающеую  программу  осуществляется  с
помощью оператора return, имеющего один из двух видов:
      return ;
      return выражение ;
   Первый  может использоваться  только в функциях, не возвращающих
значения, т.е.  в функциях  с типом  возвращаемого  значения  void.
Вторая  форма   может  использоваться   только   в   функциях,   не
возвращающих значение;  вызывающей функцию  программе  возвращается
значение выражения.  Если необходимо,  то выражение  преобразуется,
как это  делается при  присваивании, к  типу функции, в которой оно
возникло. Обход  конца функции  эквивалентен  возврату  return  без
возвращаемого значения.

     9.11 Оператор goto

  Можно  осуществлять  безусловную  передачу  упраления  с  помощью
оператора
      goto идентификатор ;
  Идентификатор  должен  быть  меткой    (#9.12),  расположенной  в
текущей функции.

     9.12 Помеченные операторы

  Перед любым оперотором может стоять префикс метка, имеющий вид
     идентификатор :
который  служит   для  описания  идентификатора  как  метки.  Метка
используется только  как объект  для goto. Областью видимости метки

                             - стр 302 -

является текущая  функция, исключая  любой подблок,  в котором  был
переописан такой же идентияикатор. См. #4.1.

     9.13 Пустой оператор

  Пустой оператор имеет вид
     ;
  Пустой оператор  используется для помещения метки непосредственно
перед  }  составного  оператора  или  того,  чтобы  снабдить  такие
операторы, как while, пустым телом.

     9.14 Оператор delete

  Оператор delete имеет вид
     delete выражение ;
  Результатом выражения  должен быть  указатель. Объект, на который
он  указывает,   уничтожается.  Это  значит,  что  после  оператора
уничтожения  delete   нельзя  гарантировать,   что   объект   имеет
определенное значение;  см. #17.  Эффект от  применеия  delete    к
указателю, не  полученному из  операции new   (#7.1),  неопределен.
Однако, уничтожение указателя с нулевым значением безопасно.

     9.15 Оператор asm

  Оператор asm имеет вид
     asm ( строка) ;
  Смысл оператора  asm  неопределен.  Обычно  он  используется  для
передачи информации черз компилятор ассемблеру.

                   10. ВНЕШНИЕ ОПРЕДЕЛЕНИЯ

  Программа  на   C++   состоит   из   последовательности   внешних
определений.  Внешенее   определение  описывает  идентификатор  как
имеющий класс памяти static и определяет его тип. Спецификатор типа
(#8.2) может  также быть  пустым, и  в этом случае принимается  тип
int. Область  видимости внешних  определений простирается  до конца
файла, в  котором  они  описаны,  так  же,  как  действие  описаний
сохраняется до  конца блока.  Синтаксис внешних определений тот же,
что и  у описаний, за исключением того, что только на этом уровне и
внутри описаний  классов может  быть задан  код  (текст  программы)
функции.

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

Предыдущая страница Следующая страница
1 ... 40 41 42 43 44 45 46  47 48 49 50
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (4)

Реклама