当前位置: 代码网 > it编程>编程语言>C/C++ > C++中的枚举enum类型使用示例详解

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

2024年08月22日 C/C++ 我要评论
一.什么是枚举enum(what)枚举(enumeration)和类相似,能够定义一种新的数据类型,不同的是,枚举是将一组整形常量组织在一起,所以和类的使用方法有一些类似之处。二.使用枚举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类型内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • C语言中 type *(0)的具体使用

    C语言中 type *(0)的具体使用

    表达式type * (0)在 c/c++ 编程中是一个常见的技巧,通常用于内核编程和一些系统编程场景中。这种语法形式的主要作用是获取特定类型指针的虚拟地址0,从... [阅读全文]
  • C++容器算法示例详解

    C++容器算法示例详解

    容器算法<algorithm>是c++自带的容器算法,提供一系列实用的算法。在谈到容器算法,我们大概率会用到谓词predicate,谓词返回的类型是... [阅读全文]
  • C++的dynamic示例代码详解

    C++的dynamic示例代码详解

    在c++编程中,dynamic_cast 是处理多态类型转换的关键工具,允许在复杂继承结构中安全地将基类指针或引用转换为派生类指针或引用。通过利用运行时类型信息... [阅读全文]
  • C语言中大小写字母相互转化的方法示例

    引言在c语言中,大小写字母的转换可以通过标准库中的ctype.h头文件提供的函数来实现。具体来说,toupper()函数可以将小写字母转换为大写字母,而tolower()函数可以将…

    2024年08月30日 编程语言
  • c++中priority_queue模拟的实现

    c++中priority_queue模拟的实现

    一、什么是priority_queue?priority_queue是c++标准库中的一个容器适配器,用于实现优先队列(priority queue)的数据结构... [阅读全文]
  • C语言堆实现建堆算法和堆排序

    一.什么是堆?1.堆堆就是完全二叉树,而且是一种特殊的完全二叉树,它需要满足每一个父节点都大于子节点,称为大堆,或每一个父节点都小于子节点,称为小堆。而对兄弟节点之间的大小关系并没…

    2024年09月02日 编程语言

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com