По умолчанию компилятор назначает последовательные целочисленные значения константам перечисления, начиная с нуля. При необходимости можно назначить другие значения:
enum DayOfWeek {
Sunday = 628,
Monday = 616,
Tuesday = 735,
Wednesday = 932,
Thursday = 852,
Friday = 607,
Saturday = 845
};
Если значение не задается для элемента перечисления, этот элемент примет значение предыдущего элемента, увеличенное на 1. Перечисления иногда используются для объявления целочисленных констант, и в этих случаях перечислению обычно имя не задают:
enum {
FirstPort = 1024, MaxPorts = 32767
};
Другой областью применения перечислений является представление набора опций. Рассмотрим пример диалогового окна Find (поиск) с четырьмя переключателями, которые управляют алгоритмом поиска (применение шаблона поиска, учет регистра, поиск в обратном направлении и повторение поиска с начала документа). Это можно представить в виде перечисления, значения констант которого равны некоторой степени 2:
enum FindOption {
NoOptions = 0x00000000,
WildcardSyntax = 0x00000001,
CaseSensitive = 0x00000002,
SearchBackward = 0x00000004,
WrapAround = 0x00000008
};
Каждая опция часто называется «флажком». Флажки можно объединять при помощи логических поразрядных операторов
int options = NoOptions;
if (wilcardSyntaxCheckBox->isChecked)
options |= WildcardSyntax;
if (caseSensitiveCheckBox->isChecked)
options |= CaseSensitive;
if (searchBackwardCheckBox->isChecked)
options |= SearchBackwardSyntax;
if (wrapAroundCheckBox->isChecked)
options |= WrapAround;
Проверить значение флажка можно при помощи логического поразрядного оператора
if (options & CaseSensitive) {
// поиск с учетом регистра
}
Переменная типа
Имена, вводимые typedef
С++ позволяет с помощью ключевого слова
typedef QVector
После этого можно использовать имя
В Qt имена, вводимые
• Удобство: Qt объявляет с помощью
• Различие платформ: определенные типы должны определяться по-разному на различных платформах. Например,
• Совместимость: класс
Преобразование типов
С++ представляет несколько синтаксических конструкций по приведению одного типа к другому. Заключение нужного типа результата в скобки и размещение его перед преобразуемым значением — это традиционный способ, унаследованный от С:
const double Pi = 3.14159265359;
int x = (int) (Pi * 100);
cout << x << " equals 314" << endl;