【C++】枚举enum使用详解

目录

一.什么是枚举enum(WHAT)

二.使用枚举enum的场景(WHEN and WHERE)

三.如何使用枚举enum(HOW)

1)枚举的定义

2)枚举的初始化

3)指定枚举类型 

4)声明枚举对象

5)枚举对象赋值问题

6)枚举的取值范围

四.枚举enum的应用


一.什么是枚举enum(WHAT)

枚举(enumeration)和类相似,能够定义一种新的数据类型,不同的是,枚举是将一组整形常量组织在一起,所以和类的使用方法有一些类似之处。

二.使用枚举enum的场景(WHEN and WHERE)

实际中经常使用枚举来做数据的标识,可以实现对数据的分类,打个比方类似于用Ture和False区分是与非,而枚举也可以在此基础上也用整形常量的方式对数据进行更多的分类。

三.如何使用枚举enum(HOW)

1)枚举的定义

1.不限定作用域的枚举

	enum color
	{
		RED,
		GREEN,
		BLUE
	};

2.限定作用域的枚举

在enum后面加关键字class或者struct

	enum class color
	{
		RED,
		GREEN,
		BLUE
	};

3.二者区别 

解决枚举值重名的问题,保持代码的可读性

//定义两种枚举
	enum class color_inner
	{
		RED,
		GREEN,
		BLUE
	};

	enum color_out
	{
		RED,
		GREEN,
		BLUE
	};

//声明并赋值
color_out backColor = RED; //正确
color_inner forntColor = RED; //错误,默认使用了out中的RED,没有指定作用域

color_out backColor = color_out::RED; //正确,out也可以显示指定作用域
color_inner forntColor = color_inner::RED;  //正确,inner必须指定作用域

2)枚举的初始化

1.默认情况下,枚举值从0开始,依次加1

	enum color
	{
		RED,  //默认是0
		GREEN, //默认是1
		BLUE  //默认是2
	};

2.手动指定枚举值

a.可以全部指定

	enum color
	{
		RED=1,  
		GREEN=5, 
		BLUE=7  
	};

b.可以部分指定,未被初始化的枚举值的值默认将比其前面的枚举值大1

	enum color
	{
		RED=2,  
		GREEN,  //默认值是3,比前一个多1
		BLUE=7  
	};

c.可以重复指定

	enum color
	{
		RED=8,  
		GREEN=5, 
		BLUE=8  //重复指定
	};

3)指定枚举类型 

C++11中,还可以指定给枚举类型赋值的整数类型,在enum的名字后面加上冒号以及指定的类型,限定作用域枚举默认为32位整形,在某些情况下,甚至没必要用到32位,为了节省开销,甚至可以用8位整形unsigned char,将类型指定成后,枚举变量变成了8位整型,减少了内存使用。不限定作用域的枚举类型,其成员不存在默认类型,只需要知道潜在类型是足够大的,肯定能容纳枚举值就行。

需要注意的是,不能指定为float或者double等类型,因为枚举量必须是一个整数,float和double都不是整数。

	enum color:unsigned long
	{
		RED=1,  
		GREEN=5, 
		BLUE=7  
	};

4)声明枚举对象

a.先声明变量,再对变量赋值

#include <iostream>
using namespace std;

int main()
{
	enum color
	{
		RED,
		GREEN,
		BLUE
	};

	enum color backColor, frontColor, innerColor;

	backColor = RED;
	frontColor = GREEN;
	innerColor = BLUE;

	cout << backColor << "--" << frontColor << "--" << innerColor << endl;
	system("pause");
	return 0;
}

b.声明变量的同时赋初值

#include <iostream>
using namespace std;

int main()
{
	enum color
	{
		RED,
		GREEN,
		BLUE
	};

	enum color backColor = RED, frontColor = GREEN, innerColor = BLUE;

	cout << backColor << "--" << frontColor << "--" << innerColor << endl;
	system("pause");
	return 0;
}

c.定义类型的同时声明变量,然后对变量赋值

#include <iostream>
using namespace std;

int main()
{
	enum color
	{
		RED,
		GREEN,
		BLUE
	}backColor, frontColor, innerColor;

	backColor = RED;
	frontColor = GREEN;
	innerColor = BLUE;

	cout << backColor << "--" << frontColor << "--" << innerColor << endl;
	system("pause");
	return 0;
}

d.类型定义,变量声明,赋初值同时进行

#include <iostream>
using namespace std;

int main()
{
	enum color
	{
		RED,
		GREEN,
		BLUE
	}backColor = RED, frontColor = GREEN, innerColor = BLUE;

	cout << backColor << "--" << frontColor << "--" << innerColor << endl;
	system("pause");
	return 0;
}

5)枚举对象赋值问题

a.不能将非枚举量赋给枚举变量,能将枚举量赋给非枚举变量,因为枚举量是符号常量,编译器会自动把枚举量转换为int类型

int a;
a=RED;

b.枚举变量不能进行算术运算,对于枚举,只定义了赋值运算符,没有为枚举定义算术运算,错误的算数计算会导致范围超限问题

RED++;  //错误
RED=GREEN+BLUE;  //错误

c.赋值超限问题

backColor = color(2); //等同于backColor = BLUE;
backColor = color(10);  //错误,超过color元素上限

6)枚举的取值范围

上限:需要知道枚举量的最大值。找到大于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限

	enum color:unsigned long
	{
		RED=1,  
		GREEN=5, 
		BLUE=7  //上限是8-1=7
	};

    backColor = color(7); //所以可以取到7

下限:枚举量的最小值不小于0,则枚举下限取0;枚举量的最小值小于0,则枚举下限是 小于最小枚举量的 最大的2的幂,加上1。

	enum color:unsigned long
	{
		RED=-1,  
		GREEN=-5, 
		BLUE=-7  //下限是-8+1=-7
	};

    backColor = color(-7); //所以可以取到-7

四.枚举enum的应用

1.常和Switch搭配使用

enum color{RED, GREEN, BLUE}backColor=RED;

switch (backColor)

{

  case RED:{...;break;}

  case GREEN:{...;break;}

  case BLUE:{...;break;}

  default:break;

}

2.if...else搭配使用

enum color{RED, GREEN, BLUE};

color backColor=RED;

void SetColor(color color)
{
    backColor = color ;
}

if(backColor==RED)
{
    cout<<"color is RED"<<endl;
}
else if(backColor==GREEN)
{
    cout<<"color is GREEN"<<endl;
}
else if(backColor==BLUE)
{
    cout<<"color is BLUE"<<endl;
}
else
{
    cout<<"color is OTHER"<<endl;
}

  • 151
    点赞
  • 685
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
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类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵大宝字

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值