Слайд 2 ENUM
Иногда, удобной заменой константам является объявление специального ПЕРЕЧИСЛИМОГО ТИПА, ENUM, который
содержит набор перечислимых констант.
Слайд 3 ENUM
enum Months {
JAN = 1, FEB, MAR, APR, MAY, YUN,
YUL, AUG, SEP, OCT, NOV, DEC
};
short month;
Months yourMonth;
cin >> month;
yourMonth = (Months)month;
switch (yourMonth) {
case JAN:
cout << "Январь";
break;
case FEB:
cout << "Февраль";
break;
}
cout << endl;
Слайд 4 ENUM
enum Months {
JAN = 1, FEB, MAR, APR, MAY, YUN,
YUL, AUG, SEP, OCT, NOV, DEC
};
short month;
cin >> month;
switch ((Months)month) {
case JAN:
cout << "Январь";
break;
case FEB:
cout << "Февраль";
break;
}
cout << endl;
Слайд 5 ENUM
enum Months {
JAN = 1, FEB, MAR, APR, MAY, YUN,
YUL, AUG, SEP, OCT, NOV, DEC
};
Months yourMonth;
yourMonth = MAR;
switch (yourMonth) {
case JAN:
cout << "Январь";
break;
case FEB:
cout << "Февраль";
break;
}
cout << endl;
Слайд 6 ENUM
enum Months {
JAN = 1, FEB, MAR, APR, MAY, YUN,
YUL, AUG, SEP, OCT, NOV, DEC
};
Months yourMonth;
yourMonth = YUN;
switch (yourMonth) {
case JAN:
cout << "Январь";
break;
case FEB:
cout << "Февраль";
break;
}
cout << endl;
Слайд 7 ENUM
Перечислимый тип вводится ключевым словом enum и задает набор значений, определяемый пользователем.
Набор значений заключается в фигурные скобки и является набором целых именованных констант, представленных своими идентификаторами.
Эти константы называются перечислимыми константами.
Слайд 8 ENUM
enum Months {JAN = 1, FEB, MAR, APR, MAY, YUN, YUL,
AUG, SEP, OCT, NOV, DEC};
Это объявление создает определенный пользователем тип Months с константами перечисления, представляющими месяцы года.
Поскольку первое значение приведенного перечисления установлено равным 1, оставшиеся значения увеличиваются на 1 от 1 до 12.
В объявлении перечислимого типа любой константе перечисления можно присвоить целое значение.
Слайд 9 ENUM
Типичная ошибка:
После того, как константа перечисления определена, попытка присвоить ей
другое значение является синтаксической ошибкой.
Слайд 10 ENUM
Правила хорошего тона:
Наименование перечислимого типа следует писать прописными буквами, первая
буква пишется заглавной (в отличии от переменных), слова пишутся слитно, разделение слов осуществляется верблюжьим стилем.
Идентификаторы константных значений перечислений пишут ЗАГЛАВНЫМИ буквами, слова разделяются нижней чертой _ как имена констант.
Пример: TestEnum {TEST_NAME = 1, SUPER_TEST = 2}
Слайд 11Основные моменты перечислений
Использование перечислений вместо целых констант облегчает чтение программы.
Идентификаторы в enum
должны быть уникальными, но отдельные константы перечисления могут иметь одинаковые целые значения.
Константы перечисления могут иметь только целые значения.
Набор идентификаторов перечислимого типа — собственный уникальный тип, отличающийся от других целочисленных типов.
Слайд 12Основные моменты перечислений
Перечислимые константы могут определяться и инициализироваться произвольными целочисленными константами, а также константными
выражениями:
enum Ages {MILTON= 47, IRA, GOGA= 56, PHILIP = GOGA + 7};
Каждое перечисление является отдельным типом. Типом элемента перечисления является само перечисление. Например, в
enum Keyword {ASM, AUTO, BREAK};
Значение AUTO принадлежит типу Keyword
Keyword testWord;
Переменная testWord имеет тип Keyword и способна принимать только 3 значения: ASM, AUTO или BREAK; Например:
testWord = ASM;
Слайд 13Основные моменты перечислений
Перечислимая константа может быть объявлена анонимно, то есть без имени
типа.
enum {FALSE, TRUE};
enum {LAZY, HAZY, CRAZY} why;
Первое объявление — распространенный способ объявления мнемонических целочисленных констант.
Второе объявление объявляет переменную перечислимого типа why, с допустимыми значениями этой переменной lazy, hazy и crazy
Слайд 14Основные моменты перечислений
Перечисления могут неявно преобразовываться в обычные целочисленные типы, но не наоборот.
enum
Boolean {FALSE, TRUE} q;
enum Signal {OFF, ON} a = ON; // а инициализируется в on enum
int i, j = TRUE; // верно true преобразуется в 1
a = OFF; // верно
і = а; // верно i становится 1
q = а; // неверно два различных типа
q = (Boolean)а; // верно явное преобразование (приведение)