КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

Turbo C++ Version 1.0 Programmer’s Guide

Комментировать

LIB.com.ua [электронная библиотека]: : TURBO C++ Version 1.0 Programmer’s Guide

private.

3. Объединения инициализируются через компонент, объяв-
ленный первым

union local87 (*
int i;
double d;
*) a = (* 20*);

4. С++ : Объединение не может участвовать в иерархии
класса. Оно не может являться производным от какого-либо
класса или быть базовым классом. Объединение может иметь
конструктор.

5. С++ : Анонимные объединения не могут иметь компонен-
ты-функции.
Перечислимые данные

Тип перечислимых данных служит для обеспечения мнемони-
ческих идентификаторов набора целочисленных значений. Напри-
мер, следующее объявление:

enum days (* sun, mon, tues, wed, thur, fri, sat *)
anyday;

устанавливает уникальный интегральный тип, enum days,
переменную anyday этого типа и набор нумераторов
(sun,mon,…), которым соответствуют целочисленные констан-
ты.

Turbo C++ может хранить нумераторы в одном байте, если
это позволяет диапазон значений нумераторов, когда выключена
опция -b (по умолчанию она включена; это означает, что дан-
ные типа enum всегда int), но при использовании их в выраже-
ниях выполняется этих данных преобразования к типу int.
Идентификаторы, используемые в списке нумераторов, неявно
получают тип unsigned char или int, в зависимости от значе-
ний нумераторов. Если все значения могут быть представлены
типом unsigned char, то это и будет типом каждого нумерато-
ра.

C++ В С переменной перечислимого типа может быть прис-
воено любое значение типа int — кроме этого, никакого конт-
роля типа не выполняется. В С++ переменной перечислимого
типа может присваиваться только значение одного из ее нуме-
раторов. Таким образом,

anyday = mon; // так можно
anyday = 1; // так нельзя, даже хотя mon == 1

Идентификатор days является опциональным тегом перечис-
лимого типа,который можно использовать в последующих объяв-
лениях переменных перечислимого типа enum days:

enum days payday, holiday; // объявление двух переменных

С++ В С++ ключевое слово enum можно опустить, если в
пределах данного контекста имя days не дублируется.

Как и в случае объявлений struct и union, если далее
переменные данного типа enum не требуются, тег может быть
опущен:

— 70 —
enum (* sun, mon, tues, wed, thur, fri, sat *) anyday;
/* анонимный тип enum */

Подробное описание констант перечислимого типа см. на
стр. 17 оригинала.

Нумераторы, перечисленные внутри фигурных скобок, назы-
ваются перечислимыми константами. Каждой из них назначается
фиксированное целочисленное значение. При отсутствии явно
заданных инициализаторов первый нумератор (sun) устанавлива-
ется в ноль, а каждый последующий нумератор имеет значение
на единицу больше, чем предыдущий (mon = 1, tue = 2 и т.д.).

При наличии явных интегральных инициализаторов вы може-
те установить один или более нумераторов в конкретные значе-
ния. Любые последующие имена без инициализаторов будут
получать приращение в единицу. Например, в следующем объяв-
лении

/* выражение инициализатора может включать в себя нуме-
раторы, объявленные ранее */
enum coins (* penny = 1, tuppence, nickel = penny + 4,
dime =10, quarter = nickel * nickel *) smallchange;

tuppence примет значение 2, nickel — значение 5, а
quarter — значение 25.

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

не запрещено.

Тип enum может участвовать во всех конструкциях,допус-
кающих использование типов int.

enum days (* sun, mon, tues, wed, thur, fri, sat *) anyday;
enum days payday;
typedef enum days DAYS;
DAYS *daysptr;
int i = tues;
anyday = mon; // так можно
*daysptr = anyday; // так можно
mon = tues; // неверно: mon — это константа

Теги перечислимых типов разделяют пространство имен с
тегами структур и объединений. Нумераторы разделяют прост-
ранство имен с обычными идентификаторами переменных:

int mon = 11;
(*
enum days (* sun, mon, tues, wed, thur, fri, sat *) anyday;
/* нумератор mon скрывает внешнее объявление int mon */
struct days (* int i, j;); // неверно: дублируется тег days
double sat; // неверно: переопределение sat
*)
mon = 12; // снова в контексте int mon

C++ В С++ нумераторы, объявленные в пределах клас-
са,имеют контекст этого класса.

Выражения

В таблице 1.19 показано, каким образом комбинируются
идентификаторы и операции для составления грамматически вер-
ных «фраз».

— 71 —
Выражением называется последовательность операций, опе-
рандов и пунктуаторов, задающих определенное вычисление.
Формальный синтаксис, показанный в таблице 1.19, обозначает,
что выражения определяются рекурсивно: под-выражения могут
быть вложены без формальных ограничений. (Однако, если ком-
пилятор не сможет обработать какое-либо слишком сложное вы-
ражение, то будет выдано сообщение об ошибке).

Выражения Turbo C++ Таблица 1.19
————————————————————
первичное-выражение:
литерал
псевдо-переменная
(выражение)
this (только С++)
:: идентификатор (только С++)
:: имя-функции-операции (только С++)
имя

литерал:
целочисленная-константа
символьная-константа
константа-с-плавающей-точкой
строка

имя:
идентификатор:
имя-функции-операции (только С++)
имя-функции-преобразования (только С++)
квалифицированное-имя (только С++)

квалифицированное-имя: (только С++)
имя-класса :: идентификатор
имя-класса :: имя-функции-операции
имя-класса :: имя-функции-преобразования
имя-класса :: имя-класса
имя-класса :: — имя-класса

постфиксное-выражение:
первичное-выражение
постфиксное-выражение[выражение]
постфиксное-выражение ()
постфиксное-выражение () (только С++)
постфиксное-выражение . имя постфиксное-выражение -> имя
постфиксное-выражение ++ постфиксное-выражение —

список-выражений:
выражение-присваивания
список-выражений , выражение-присваивания

унарное-выражение:
постфиксное-выражение
++ унарное-выражение
— унарное-выражение
унарная-операция выражение-приведения
sizeof унарное-выражение
sizeof (имя-типа)
выражение-распределения (только С++)
выражение-отмены-распределения (только С++)

унарная-операция: одно из
& * + — тильда !

выражение-распределения: (только С++)
new имя-ограниченного-типа

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *