Ввод переменной типа enum с клавиатуры

285
15 июля 2022, 22:00

У меня есть класс HealthyFood и enum Fruits{ apple, pear, peach, orange}. Я создаю в ранее сказанном классе переменную fruit типа данных Fruits и хочу создать сеттер для ее заполнения. Для этого мне надо как-то перегрузить оператор ввода, чтобы он строку преобразовывал в Fruits. Как это сделать?

Answer 1

Попробуйте где то так

enum Fruits{ apple, pear, peach, orange};
std::istream& operator>>(std::istream& is, Fruits& f)
{
    std::string s;
    is >> s;
    if (s == "apple") f = Fruits::apple;
    else if (s=="pear") f= Fruits::pear;
    else if (s=="peach") f= Fruits::peach;
    else if (s=="orange") f= Fruits::orange;
    return is;
}
int main(){
    Fruits f;
    std::cin >> f;
}

если при этом хочется ещё и выводить в "красивом виде", тогда можно дописать оператор вывода

std::ostream& operator<<(std::ostream& os, const Fruits& f)
{
    switch (f) {
        case 0: { os << "apple"; break; }
        case 1: { os << "pear"; break; }
        case 2: { os << "peach"; break; }
        case 3: { os << "orange"; break; }
        default: {os << "------"; break;}
    }
    return os;
}

и теперь

Fruits f = pear;
std::cout << f;

будет работать так, как Вам хочется.

READ ALSO
Класс обертка для управления константностью объекта

Класс обертка для управления константностью объекта

У меня есть несколько классов, в которых есть функции lock() и unlock(), которые управляют переменной класса bool lockЕсли lock == true, то объект становится...

214
Ошибки C2440 / E0513 [дубликат]

Ошибки C2440 / E0513 [дубликат]

Учу С++Дошел до классов

196
Есть ли конструктор у базовых типов?

Есть ли конструктор у базовых типов?

Есть ли конструктор у базовых типов, например int?

229
Как получить больше данных на onion-сайте в TOR?

Как получить больше данных на onion-сайте в TOR?

Создал onion-сайт, но переменная $_SERVER не отображает ничего полезногоМне кажется, можно как-то получить информацию о цепочке, её IP и т

206