C++中的枚举enum类型使用示例详解

 更新时间:2024年08月22日 11:44:09   作者:程序员赵大宝  
枚举和类相似,能够定义一种新的数据类型,不同的是,枚举是将一组整形常量组织在一起,所以和类的使用方法有一些类似之处,这篇文章主要介绍了C++中的枚举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;
}

到此这篇关于C++中的枚举enum类型使用示例详解的文章就介绍到这了,更多相关C++ 枚举enum类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用c++11 constexpr时遇到的坑详解

    使用c++11 constexpr时遇到的坑详解

    c++11 constexpr将变量声明为constexpr类型以便由编译器来验证变量是否是一个常量表达式,这篇文章主要给大家介绍了关于使用c++11 constexpr时遇到的坑,需要的朋友可以参考下
    2021-05-05
  • C++实现LeetCode(122.买股票的最佳时间之二)

    C++实现LeetCode(122.买股票的最佳时间之二)

    这篇文章主要介绍了C++实现LeetCode(122.买股票的最佳时间之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实例详解lambda表达式的使用

    C++实例详解lambda表达式的使用

    Lambda表达式是现代C++在C ++ 11和更高版本中的一个新的语法糖 ,在C++11、C++14、C++17和C++20中Lambda表达的内容还在不断更新。 lambda表达式(也称为lambda函数)是在调用或作为函数参数传递的位置处定义匿名函数对象的便捷方法
    2022-05-05
  • C语言扫雷排雷小游戏实现全程

    C语言扫雷排雷小游戏实现全程

    本篇我将带领大家攻克扫雷游戏各处难点,让你写扫雷不在困难,我们的扫雷游戏可以实现标记雷的功能和展开一片的功能。我们将分三个文件为大家介绍,分别为test.c,game.h和game.c
    2022-05-05
  • 浅谈哈希表存储效率一般不超过50%的原因

    浅谈哈希表存储效率一般不超过50%的原因

    下面小编就为大家带来一篇浅谈哈希表存储效率一般不超过50%的原因。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 基于MATLAB神经网络图像识别的高识别率代码

    基于MATLAB神经网络图像识别的高识别率代码

    今天小编就为大家分享一篇关于基于MATLAB神经网络图像识别的高识别率代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 解析c语言switch中break语句的具体作用

    解析c语言switch中break语句的具体作用

    以下是对c语言switch中break语句的作用进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-07-07
  • C++归并排序算法实例

    C++归并排序算法实例

    这篇文章主要介绍了C++归并排序算法实例,本文先是介绍了什么是归并排序,然后给出了实现代码,需要的朋友可以参考下
    2014-10-10
  • C++使用回溯法解决黄金矿工问题

    C++使用回溯法解决黄金矿工问题

    在矩阵中考察回溯算法,分为任意起点、左上角开始等情况。从而有不同的模板,其实区别就是直接开始还是每个坐标都去尝试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • C++实现飞机大战

    C++实现飞机大战

    这篇文章主要为大家详细介绍了C++实现飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11

最新评论