Ветки switch для перечисления в C++
Конструкция switch принимает переменную
типа enum class и сравнивает ее с константами
в метках case. Каждая ветка заканчивается
break, иначе выполнение провалится дальше.
В case пишут полное имя константы, как
Color::red. Запишем функцию, которая по дню
недели возвращает короткую метку, и выведем результат
для пятницы:
#include <iostream>
#include <string>
enum class Day {
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
};
std::string label(Day day) {
switch (day) {
case Day::monday:
return "start";
case Day::tuesday:
return "mid";
case Day::wednesday:
return "mid";
case Day::thursday:
return "mid";
case Day::friday:
return "end";
case Day::saturday:
return "rest";
case Day::sunday:
return "rest";
}
return "";
}
int main() {
std::cout << label(Day::friday) << "\n";
return 0;
}
Несколько констант можно обработать одной веткой, если
перечислить их через запятую в одной метке case.
Запишем проверку выходного дня и выведем ответ для
воскресенья:
#include <iostream>
enum class Day {
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
};
bool isWeekend(Day day) {
switch (day) {
case Day::saturday:
case Day::sunday:
return true;
case Day::monday:
case Day::tuesday:
case Day::wednesday:
case Day::thursday:
case Day::friday:
return false;
}
return false;
}
int main() {
std::cout << isWeekend(Day::sunday) << "\n";
return 0;
}
Объявите enum class Season с константами
spring, summer, autumn
и winter.
Напишите функцию isWarm с параметром
Season: для summer и spring
верните true, для остальных - false.
Вызовите с Season::winter и выведите результат.
Объявите enum class Role с константами
guest, user и admin.
Дана переменная:
Role role = Role::user;
С помощью switch для переменной role
запишите в code число: guest -
0, user - 1,
admin - 2.
Выведите code.