|
Программирование >> Перегруженные имена функций и идентификаторы
Если в случае вызова перегруженного имени с помощью вышеуказанного метода не найдено ни одной функции, и если функция получает параметр типа класса, то конструкторы классов параметров (в этом случае существует единственный набор преобразований, делающий вызов допустимым) применяются неявным образом. Например: 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 )) */ Все имена функций операций являются автоматически перегруженными. Описание перечисления Перечисления являются 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 }. Описание Asm Описание Asm имеет вид: asm (строка); Смысл описания asm не определен. Обычно оно используется для передачи информации ассемблеру через компилятор. Операторы Операторы выполняются последовательно во всех случаях кроме особо оговоренных. Оператор выражение Большинство операторов является операторами выражение, которые имеют вид выражение ; Обычно операторы выражение являются присваиваниями и вызовами функций. Составной оператор, или блок Составной оператор (называемый также блок , что эквивалентно) дает возможность использовать несколько операторов в том месте, где предполагается использование одного: Составной оператор: { список описаний opt список операторов opt } список описаний: описание описание список описаний Список операторов: оператор оператор список операторов Если какой-либо из идентификаторов в списке описаний был ранее описан, то внешнее описание выталкивается на время выполнения блока, и снова входит в силу по его окончании. Каждая инициализация auto ии register переменных производится всякий раз при входе в голову блока. В блок делать передачу; в этом случае инициализации не выполняются. Инициализации переменных, имеющих класс памяти static осуществляются только один раз в начале выполнения программы. Условный оператор Есть два вида условных операторов: if ( выражение ) оператор if ( выражение ) оператор else оператор В обоих случаях вычисляется выражение, и если оно не ноль, то выполняется первый подоператор. Во втором случае второй подоператор выполняется, если выражение есть 0. Как обычно, неоднозначность else разрешается посредством того, что else связывается с последним встреченным if, не имеющим else. Оператор whilе Оператор while имеет вид: while ( выражение ) оператор
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |