练习9:使用 enum class 判断交通信号¶
任务描述¶
定义作用域枚举 TrafficLight,表示红灯、黄灯和绿灯三种交通信号。
编写函数 canPass,根据传入的交通信号判断车辆是否可以通行:只有绿灯 TrafficLight::Green 时返回 true,红灯与黄灯时均返回 false。
相关知识¶
作用域枚举 enum class¶
C++11 的 enum class 用于定义作用域枚举。枚举值必须通过“枚举类型名 + :: + 枚举值”访问:
与传统 enum 相比,enum class 具有更好的类型安全性,不会隐式转换为整数。
使用 switch 判断枚举值¶
switch 语句适合根据枚举值执行不同分支:
switch (light) {
case TrafficLight::Green:
return true;
case TrafficLight::Red:
case TrafficLight::Yellow:
return false;
}
编程要求¶
- 使用 C++11 标准编写程序。
- 保留题目给出的
enum class TrafficLight定义。 - 完成函数
canPass的函数体。 - 函数必须采用以下声明形式:
- 必须使用
switch语句完成判断。 - 只有
TrafficLight::Green返回true。 TrafficLight::Red和TrafficLight::Yellow均返回false。- 不得将枚举值转换为整数后再进行比较。
- 在
test函数中使用assert验证三种信号的结果。
待完成代码¶
#include <cassert>
#include <iostream>
enum class TrafficLight {
Red,
Yellow,
Green
};
// TODO:只有 Green 返回 true,其他情况返回 false
bool canPass(TrafficLight light) {
// TODO
}
void test() {
assert(!canPass(TrafficLight::Red));
assert(!canPass(TrafficLight::Yellow));
assert(canPass(TrafficLight::Green));
}
int main() {
test();
std::cout << "本关测试通过" << std::endl;
return 0;
}
测试说明¶
| 测试项 | 函数调用 | 预期结果 |
|---|---|---|
| 红灯 | canPass(TrafficLight::Red) |
false |
| 黄灯 | canPass(TrafficLight::Yellow) |
false |
| 绿灯 | canPass(TrafficLight::Green) |
true |
注意:不能写成 canPass(Red)。enum class 的枚举值位于自己的作用域中,必须写为 TrafficLight::Red。
开始你的任务吧,祝你成功!