Структуры и перечисления
Структура
struct объединяет несколько полей под одним типом:
struct Player { std::string name; int health = 100; float speed = 1.0f;};Player player{"Knight", 80, 2.5f};std::cout << player.name << '\n';По умолчанию члены struct открыты (public). У class доступ по умолчанию закрытый (private). В остальном обе конструкции поддерживают методы, конструкторы, наследование и другие возможности классов.
Инициализация
Предпочитай явную инициализацию. Фигурные скобки помогают обнаруживать некоторые сужающие преобразования:
struct Point { int x{}; int y{};};Point origin{};Поля с {} получают начальные значения соответствующего типа. Это особенно важно для встроенных числовых типов.
enum class
Перечисление задаёт конечный набор смысловых значений:
enum class Direction { North, South, West, East};Direction direction = Direction::North;enum class предпочтительнее старого enum в большинстве новых проектов: имена значений не попадают напрямую в окружающую область видимости, а преобразования более строгие.
Методы в структуре
struct Rectangle { float width{}; float height{}; float Area() const { return width * height; }};Метод const обещает не изменять состояние объекта через не-константный this.
Когда использовать
Структуры подходят для небольших моделей данных и типов-значений. Если объект должен защищать инварианты, контролировать изменение состояния или управлять ресурсами, может быть уместен класс с закрытыми полями.
Итог
Создавай собственные типы, когда несколько значений образуют одну понятную сущность. Используй enum class для состояний и категорий, а инициализацию делай явной.
