C++ 枚举enum

枚举是种特殊的数据类型,也可以理解为它代表整形数据int

既然它某种程度上就等于int,为何还要多此一举?

假设现在你利用数组创建了一个万人的成绩单,并且每个人的位置创建完就保持不动,只能修改成绩。你当然可以用0~9999来索引每个人的成绩,又假设你记忆很好,创建完当天你居然能记住所有人的索引,我让你修改Shan的成绩,你记得她的idx为413,然后你就操作scores[413]=99,出色的完成了任务。但是一个星期之后我发现某些成绩不对,再次需要修改,你还能清楚地记得所有人对应的idx吗?(不能用哈希表作弊)如果不能,枚举值能很好地帮助我们,你只要知道名字,用名字做索引,就能准确索引到她的成绩并修改。

不难发现,在索引的对象有一定的个性信息时,相对于一个整形索引0,1,2…,枚举类型能更加直观地反映这种信息,有效地防止错误索引。

如果有点迷糊的请看下面↓ ↓ ↓ ↓ ↓ ↓

详细的代码和注释

#include<iostream>


using namespace std;


int main()
{
	//初始化枚举类型Stu,相当于我们平常用的int、char、string等
	// 不同的是枚举类型取值范围只有{}里面这些。
	enum Stu {Tom,Jenny,Gogo}; //Tom=0,Jenny=1,Gogo=2
	//enum Stu { Tom=2, Jenny, Gogo }; Tom=2,Jenny=3,Gogo=4

	Stu students;//初始化变量students,该变量只能被赋值为Tom,Jenny,Gogo这三种

	students = Gogo;
	cout << "枚举类型布尔判断" << endl;
	cout << "students是否是Gogo? " <<(students== Gogo)<< endl; //既可以和枚举类型比较
	cout << "students是否2? "<<(students== 2)<< endl; //也可以和数值类型(int float等)比较
	cout << "students是否是Jenny? " << (students== Jenny)<< endl;
	cout << "students是否大于2? " << (students > 2) << endl; //也可以和数值类型(int float等)比较

	cout << "用枚举值索引并修改数组元素" << endl;
	int scores[] = { 59,90,70 };
	scores[Jenny] = 99; //除了初始化要索引值对应,以后赋值无需知道索引值也可以修改三个人的分数

	for (int i = 0; i < 3; i++)
	{
		cout << scores[i] << "\t";
	}
	cout << endl;

	 
	return 0;
}
C++中的枚举类型(enum)是一种用户定义的数据类型,它用于定义一组命名的整数常量。枚举类型的语法如下: ```c++ enum 枚举类型名 { 枚举值1, 枚举值2, ... }; ``` 其中,枚举值可以是任何整数常量,如果没有显式地为枚举值指定值,则第一个枚举值默认为0,后续枚举值依次加1。例如: ```c++ enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; ``` 上述代码定义了一个Weekday枚举类型,其中Monday的值为0,Tuesday的值为1,以此类推。 可以通过以下方式定义枚举值的值: ```c++ enum Weekday { Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7 }; ``` 上述代码定义了一个Weekday枚举类型,与之前的定义不同的是,这里显式地为每个枚举值指定了值。 枚举类型可以用于定义变量、函数参数、函数返回值等,例如: ```c++ enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; Weekday today = Monday; void printWeekday(Weekday day) { switch (day) { case Monday: cout << "Monday" << endl; break; case Tuesday: cout << "Tuesday" << endl; break; case Wednesday: cout << "Wednesday" << endl; break; case Thursday: cout << "Thursday" << endl; break; case Friday: cout << "Friday" << endl; break; case Saturday: cout << "Saturday" << endl; break; case Sunday: cout << "Sunday" << endl; break; } } Weekday getNextDay(Weekday day) { return static_cast<Weekday>((day + 1) % 7); } ``` 上述代码定义了一个Weekday枚举类型以及一些与之相关的变量和函数。注意,在printWeekday函数中,我们使用了switch语句来根据传入的Weekday枚举值进行不同的操作。在getNextDay函数中,我们使用了static_cast将整数常量转换为Weekday类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值