C++ Урок 13: Перечисления (Enum) с нуля

Перечисления, также известные как enum или enumeration, — полезный инструмент во многих языках программирования, включая C++. Они позволяют создавать наборы именованных констант, повышая читаемость и удобство обслуживания кода.

Что такое перечисления?

Перечисление — это способ объявления нескольких переменных с присваиванием им числовых значений. Это особенно полезно для организации и структурирования кода, когда требуется использовать несколько связанных констант. Например, вместо использования магических чисел (непонятных числовых значений в коде) для обозначения различных уровней, состояний или типов, можно использовать именованные константы перечисления.

Объявление и использование перечислений

Объявление перечисления начинается с ключевого слова enum, за которым следует имя перечисления и фигурные скобки, содержащие список элементов. Каждому элементу можно явно присвоить значение; в противном случае значения присваиваются по умолчанию, начиная с 0 и увеличиваясь на 1 для каждого последующего элемента.

enum Tree {
  TreeOne, 
  TreeTwo, 
  TreeThree
};

// Вывод на экран: 0 1 2
std::cout << TreeOne << " " << TreeTwo << " " << TreeThree << std::endl;

Если явно задать значение для первого элемента, последующие элементы будут получать значения, увеличиваясь на 1 относительно предыдущего:

enum Tree {
  TreeOne = 1, 
  TreeTwo, 
  TreeThree = 45,
  TreeFour
};

// Вывод на экран: 1 2 45 46
std::cout << TreeOne << " " << TreeTwo << " " << TreeThree << " " << TreeFour << std::endl;

Практический пример: Лифт в торговом центре

Рассмотрим пример использования перечислений для моделирования лифта в торговом центре с четырьмя этажами: паркинг, холл, этаж с магазинами и крыша.

enum Floor {
  Parking = -1,
  Hall = 0,
  ManyShops = 1,
  Roof = 2
};

bool exit = false;
int floor;

while (!exit) {
  std::cout << "Enter floor from -1 to 2: ";
  std::cin >> floor;

  switch (floor) {
    case Parking:
      std::cout << "You are on the Parking floor." << std::endl;
      break;
    case Hall:
      std::cout << "You are on the Hall floor." << std::endl;
      break;
    case ManyShops:
      std::cout << "You are on the ManyShops floor." << std::endl;
      break;
    case Roof:
      std::cout << "You are on the Roof floor." << std::endl;
      break;
    default:
      std::cout << "Floor only from -1 to 2" << std::endl;
      break;
  }

  std::cout << "To exit enter 1, to continue enter 0: ";
  std::cin >> exit;
}

В этом примере перечисление Floor делает код более понятным и легко поддерживаемым, чем использование магических чисел (-1, 0, 1, 2).

Перечисления — мощный инструмент для повышения читаемости и организации кода в C++. Они упрощают работу с наборами именованных констант, делая код более понятным и удобным для обслуживания. Важно использовать перечисления разумно, избегая чрезмерного применения и убедившись, что они действительно улучшают структуру кода.

Что будем искать? Например,программа