主要内容 #
1. 生活中的分类 #
请问下面的词汇应该归属于什么类?
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
很显然,应该是星期(Weekday)。
我们只知道,在 C++ 中可以定义很多数据类型。比如 int char float 等。
那么,我们可以定义“星期类型的变量吗?”
2. 自定义的数据类型 #
1. 举例 #
当然是可以的。请看例程
// 定义一个 WeekDay 类型 enum WeekDay { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; // 定义一个 WeekDay 类型的变量 WeekDay a = WeekDay::Monday;
上面演示的,就是“枚举”类型。也就是自定义的数据类型。
小练习,请自定义一个“学科”类型的变量,假设学科有:Chinese, English, Math, C++。
2. 规则 #
下面详细来看:
1. 枚举类型和枚举值的命名,只能是数字、字母、下划线(与变量定义规则相同) #
请问下面的枚举,哪些是错的,并且错在哪里? enum WeekDay { 1, Monday, Monday_2, 3DASHIMA, _Wednesday, +-/*, , Saturday, _123, _, OK, OK };
解答:
enum WeekDay { 1, // 不能数字开头 Monday, Monday_2, 3DASHIMA, // 不能数字开头 _Wednesday, +-/*, // 不能是特殊字符 , // 不能为空 Saturday, _123, _, // 【正确的】 OK, OK // 不能重复定义 };
2. 定义的末尾,有一个分号 #
请回头看一下我们的例程,注意最后的分号!
3. 枚举值之间,使用逗号间隔。最后一项,可写可不写 #
请回头看一下我们的例程,注意最后的分号!
// 下面的两个枚举是等价的 enum WeekDay { Sunday, Monday, }; enum WeekDay_2 // 枚举名的定义规则也同变量的命名规则 { Sunday, Monday // 逗号可以省略 };
4. 枚举的值,相当于整数,可正可负,而且可以指定从起始值,后一个值比前一个大 1 #
请回头看一下我们的例程,注意最后的分号!
enum level { low, // 枚举值等于 0【默认值】 middle, // 枚举值等于 1 high // 枚举值等于 2 }; enum WeekDay { Sunday = 5, // 枚举值等于 5 Monday, // 枚举值等于 6 }; enum color { RED = -10, // 枚举值等于 -10 BLUE, // 枚举值等于 -9 YELLOW = 88, // 【注意】枚举值等于 88 BLACK // 【注意】枚举值等于 89 };
5. 枚举的值,可以当作整数输出 #
请看示例程序:
#include < iostream > using namespace std; enum WeekDay { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; int main() { // 直接输出 cout << WeekDay::Sunday << endl; // 输出变量 WeekDay wd = WeekDay::Sunday; cout << wd << endl; // 输出变量 wd = 2; // 相当于 WeekDay::Tuesday cout << wd << endl; return 0; }
3. switch 的使用 #
有一些场景,枚举经常和 switch 一起使用
#include < iostream > using namespace std; enum WeekDay { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; int main() { WeekDay dashima(WeekDay::Sunday); // 初始化 switch (dashima) // swith 小括号中可以是整型变量,枚举也可看作整型 { case WeekDay::Sunday: cout << "Sunday"; break; case WeekDay::Monday: cout << "Monday"; break; case WeekDay::Tuesday: cout << "Tuesday"; break; case WeekDay::Wednesday: cout << "Wednesday"; break; case WeekDay::Thursday: cout << "Thursday"; break; case WeekDay::Friday: cout << "Friday"; break; case WeekDay::Saturday: cout << "Saturday"; break; } return 0; }
小练习:巧变颜色
在命令行中,我们可以使用 windows 的一些函数来使窗口变色。 请包含头文件 #include < windows.h > system("color 0f"); // 黑色(BLK),默认 system("color 1f"); // 蓝色(BLU) system("color 2f"); // 绿色(GRE) system("color 3f"); // 青色(CYA) system("color 4f"); // 红色(RED) 请编程,实现窗口的颜色切换。请设计一个枚举类型,然后输入一个数字,执行相应的颜色切换。 要求黑色的枚举值为 -1 ,绿色的枚举值为 10 【输入】 一行,整数。 /* 请完成后,查看示例程序 */
示例程序:
#include < iostream > using namespace std; enum color { BLK, BLU, GRE, CYA, RED, }; int main() { int val(0); cin >> val; color col = (color)val; // 强制类型转化 switch (dashima) // swith 小括号中可以是整型变量,枚举也可看作整型 { case color::BLK : system("color 0f"); break; case color::BLU : system("color 1f"); break; case color::GRE : system("color 2f"); break; case color::CYA : system("color 3f"); break; case color::RED : system("color 4f"); break; } return 0; }
习题 #