Другой областью применения перечислений является представление набора опций. Рассмотрим пример диалогового окна 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;
Это очень мощная конструкция. Она может использоваться для изменения типа указателя, устранения константности и для многого другого. Например:
short j = 0x1234;
if (*(char *) &j == 0x12)
cout << "The byte order is big-endian" << endl;
В этом примере мы приводим тип
short j = 0x1234;