описать структуру при помощи union и enum С++

Помогите пожалуйста разобраться с использованием union и enum.

Моя задача:

Описать структуру с именем TRAIN, содержащую поля:

  • название пункта назначения;
  • номер поезда;
  • время отправления. Написать программу, выполняющую следующие действия:
  • ввод с клавиатуры данных в массив, состоящий из 9 структур типа TRAIN;
  • вывод на экран информации о пункте назначения, в который отправляется поезд, номер которого введен с клавиатуры;
  • если таких поездов нет, вывести соответствующее сообщение.

Я знаю, что такие задачи вы видели не раз, но у меня нет другого выхода как обратиться к вам. Совсем не понимаю, как применить здесь вышеперечисленные union и enum. Если можно, напишите код, чтобы я смог разобрать. Уровень у меня не очень((((((((

код без union и enum написать смог вроде как, но не думаю, что он как-то здесь поможет


Ответы (1 шт):

Автор решения: Zhihar

Давайте разберемся, что вообще есть и что такое union и enum

  1. enum - это перечисляемый тип (https://ravesli.com/urok-58-perechisleniya-tip-enum/)

например тип, который может принимать 3 значения - красный, зеленый и синий

enum EColors {
    red,
    green,
    blue
};

в вашей задаче единственное куда можно засунуть этот enum наименее - это название пункта назначения, например

enum EDestination {
    Moscow,
    Muhosranks,
    SaintPetersburg
};

EDestination start = EDestination::Moscow;
EDestination finish = EDestination::Muhosranks;
  1. union - это объединение нескольких переменных в одной области памяти (http://www.c-cpp.ru/books/obedineniya)

например

union UNumbers {
    int num;
    char letter;
}

В результате в одной переменной, занимающей 4 байта будет содержаться 2 переменные num (4 байта) и letter (1 байт)

вообще в современном программировании, когда ресурсов более-менее хватает, использовать union еще то извращение

Что конкретно в вашей задаче можно объединить в union? Например время отправления и номер поезда при условии, что время отправления мы запишем в 3 байта, а номер поезда в 1 байт

union UTrainInfo {
    char departure[3];
    int train_id;
};

Правда в этом случае номера поездов будут лежать в диапазоне 0x01000000 - 0xff0000, а время записывать без минут, к примеру '115' будет означать 11:50

P.S.

правда гораздо удобнее использовать просто структуру с соответствующими типами

struct TrainData {
    std::string destination; // пункт назначения
    int         id; // номер поезда
    int         departure; // время отбытия
};
→ Ссылка