C++枚举类型教案
一、枚举类型的应用场景
只需要将需要的变量值一一列举出来,便构成一个枚举类型。
二、枚举类型的定义
·定义方式:
enum 枚举类型名字{枚举常量表};
·关键字enum:说明接下来定义的是一个枚举类型
·枚举类型名字:指明此处定义的枚举类型的名字。
·枚举常量表:由枚举常量(或称枚举成员)构成。枚举常量表列出枚举类型所有可能的取值,各枚举常量之间用“,”间隔,且各枚举常量必须不同。
·应用举例:
enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
enum color_set{RED,BLUE,WHITE,BLACK};//定义枚举类型color_set
·特别注意:枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。例如,以下定义非法:
enum year_set{2010,2011,2012,2013,2014};//枚举常量不能是整形常量
enum book_set{'a','b','c','d'};//枚举类型不能是字符常量
三、枚举类型应用说明
1、枚举元素具有默认值。默认从0开始,依次为0,1,2,3......
例如:
enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
//默认从0开始,即SUN=0,MON=1,依次为0,1,2,3,4,5,6,SAT=6
2、可以在声明中另行定义枚举元素的值。
enum Weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
//定义SUN=7,MON=1,则后面的值在前面值的基础上依次加1,即TUE=2,WED=3,......SAT=6
3、枚举类型可以进行关系运算。
例如:
day1=SUN;//day1中元素SUM的序号值为0
DAY2=MON;//day2中元素MON的序号值为1
if(day2>day1)//day2>day1比较的就是序号值的关系1>0
4.枚举变量可以直接输出,输出的是变量的整数值。
enum color_set1 {RED, BLUE, WHITE, BLACK};
color3=RED; //将枚举常量值赋给枚举变量
cout<< color3; //输出的是color3的整数值,即RED的整数值1
5、整数值不能直接赋给枚举变量,如需将整数赋给枚举变量,应进行强制类型转换。
枚举(隐含转换)整形
整形(显示转换)枚举
1)枚举型数据隐含转换为整型数据(隐含转换)
int count=MON;//将枚举型数据MON的值赋给整型数据数据count
int a;
a=SUN;//枚举值赋给整型变量
cout<<a;
2)整型数据转换为枚举数据(显式转换)
result=GameResult(count);//显示转换,括号中的整型数据转换成枚举数据
6、对枚举元素按常量处理,但不能对它们直接赋予常量值。
SUN=0;//SUN是枚举元素,不能赋值,此语句非法
若将整数值赋给枚举变量需要进行强制类型转换:值前面加(类型)
SUN=(Weekday)7;//在值前面加(类型)是常用的强制类型转换方法
7、如果为枚举变量赋值,则它们必须是整数。枚举变量相当于整型变量的一个子集。
enum weekday{SUN=1.1,MON=1.2,......};//枚举变量赋值只能是整数,相当于整型变量的一个子集,此语句非法
四、典型例题——代码运用
1)声明枚举类型Weekday,包括SUNDAY到SATURDAY七个元素在程序中声明Weekday类型的变量,对其赋值,声明整型变量,看看能否对其赋Weekday类型的值。
#include<iostream>
using namespace std;
enum Weekday {SUN,MON,TUE,WED,TUR,FRI,STA};
int main()
{
Weekday day;
enum Weekday today = FRI;
day = SUN;
cout << day << endl << today << endl;
return 0;
}
实验测试:若将整型数据赋给枚举变量,则会出现以下错误。
int main()
{
Weekday day;
enum Weekday today = FRI;
day = 5;//修改为 day =(Weekday)5;
cout << day << endl << today << endl;
return 0;
}
完整分析:
#include<iostream> using namespace std; enum Weekday { SUN, MON, TUE, WED, TUR, FRI, STA };//声明枚举类型名weekday int main() { Weekday day; enum Weekday today = FRI;//枚举型变量 day ,today int yesterday;//整型变量 yesterday yesterday = TUR;//对整型变量赋weekday型的值,测试是否正确,结果正确:枚举型变量(小)->整形变量(大),隐式转换 //day = SUN;//对枚举型变量赋weekday型的值,若对枚举形变量赋整型值,是否正确? //day = 0;//报错:无法从int型转换为枚举类型weekday day = (Weekday)0;//正确!强制类型转换,格式day=Weekday(0); 也正确 cout << day << endl << today <<endl<<yesterday<< endl; return 0; }
2)口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中取出3个不同颜色的球,问有多少种取法。
#include<iostream>
using namespace std;
void transfer(int i)//将相应的数值组合通过switch语句转换为字符串
{
switch (i)
{
case 0:cout << "red "; break;
case 1:cout << "yello "; break;
case 2:cout << "blue "; break;
case 3:cout << "white "; break;
case 4:cout << "black "; break;
}
}
enum ball { red, yello, blue, white, black };//定义球的枚举类型
int main()
{
int i, j, k, count = 0;
for (int i = red; i <= black; i++)
{
for (int j = i + 1; j <= black; j++)
{
for (int k = j + 1; k <= black; k++)
{
transfer(i);
transfer(j);
transfer(k);
cout << endl;
count++;
}
}
}
cout << count;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?