C++数据类型:枚举(enum)
一. 定义与基本概念
1. 定义语法
在C++中,枚举(enum)类型用于定义一组命名的整型常量。枚举类型的定义以enum关键字开始,后面跟着枚举类型的名称(可省略),然后是花括号内的枚举常量列表。
enum Color { RED, GREEN, BLUE };
这里定义了一个名为Color的枚举类型,它包含三个枚举常量:RED、GREEN和BLUE。
2. 默认值
在没有显式指定值的情况下,枚举常量的值从0开始,依次递增。在上面的例子中,RED的值为0,GREEN的值为1,BLUE的值为2。
二. 使用枚举类型
1. 变量声明与赋值
可以声明枚举类型的变量,并将枚举常量赋值给这些变量。
Color c = RED;
这里声明了一个Color类型的变量c,并将RED赋值给它。
2. 作为函数参数和返回值
枚举类型可以作为函数的参数和返回值。
void printColor(Color c) { switch (c) { case RED: std::cout << "Red"; break; case GREEN: std::cout << "Green"; break; case BLUE: std::cout << "Blue"; break; } } Color getRandomColor() { // 这里只是简单返回一个随机的枚举常量,实际应用可能更复杂 return GREEN; }
三. 指定枚举常量的值
可以显式地为枚举常量指定值。
enum Weekday { MON = 1, TUE, WED, THU, FRI, SAT, SUN };
在这个例子中,MON的值被指定为1,那么TUE的值为2,WED的值为3,依此类推。
四. 强类型枚举(C++11及以上)
1. 定义与特性
在C++11及以上版本中,引入了强类型枚举(enum class或enum struct)。强类型枚举与普通枚举相比,具有更强的类型安全性。
enum class NewColor { RED, GREEN, BLUE };
强类型枚举不能隐式地转换为整数类型,也不能与其他不同类型的枚举进行比较。要使用强类型枚举的值,必须显式地进行类型转换。
NewColor nc = NewColor::RED; // int num = nc; // 错误,不能隐式转换 int num = static_cast<int>(nc);
2. 作用域限定
强类型枚举的常量是在枚举类型的作用域内的,避免了命名冲突。
enum class AnotherColor { RED }; // 这里的AnotherColor::RED与NewColor::RED不会冲突
五. 枚举的应用场景
1. 状态表示
枚举常用于表示对象的状态。例如,一个文件对象可能有OPEN、CLOSED、READING、WRITING等状态,可以用枚举来清晰地表示这些状态。
2. 选择类型
在需要用户从有限的几个选项中进行选择时,枚举是一种很好的表示方式。例如,在图形界面中,按钮的样式可能有ROUND、SQUARE、RECTANGULAR等,可以用枚举来定义这些样式类型。
C++编程语言基础
- C++:从入门到工作的教程
- 这是我的第一个 C++程序!
- C++中main函数有什么作用?
- C++中 #include 指令的作用
- C++中常用的预处理指令
- C++中 iostream 头文件定义了什么
- C++名称空间(namespace)
- C++标准库中 std 命名空间定义了些什么
- C++常用的头文件
- C++源代码的发布方式
- C++变量名的定义、变量的作用、使用规范
- C++的关键字列表
- C++数据类型:整型(整数类型)
- 二进制补码、原码、反码
- C++数据类型:char字符型(整数类型)
- ASCII码表及C++字符函数库(cctype)
- 计算机汉字编码
- C++数据类型:bool类型(整数类型)
- C++中 const 限定符
- C++数据类型:浮点数
- C++运算符:算术运算符
- C++运算符:类型转换规则
- 计算机数据存储大小端模式
- C++运算符:位运算 与 bitset类库
- C++运算符:关系运算符与逻辑运算符
- C++流程控制:顺序、选择、循环、跳转语句
- C++函数的定义、参数传递、重载、嵌套
- C++数组:一维、二维、多维数组的运用
- C-style字符串、库函数 与 std::string对象
- C++数据类型:结构体(struct)
- C++数据类型:联合体(union)
- C++数据类型:枚举(enum)
- C++数据类型别名:typedef
- C++指针
- C++内存操作符:new分配 与 delete释放
- C++标准模板库(STL)容器、算法、迭代器
- C++标准模板库(STL)vector顺序容器
- C++标准模板库(STL)array固定容器
- C++标准模板库(STL)list双向链表容器
- C++标准模板库(STL)deque双端队列
- C++标准模板库(STL)集合 set 关联容器
- C++标准模板库(STL)map关联容器
- C++标准模板库(STL)unordered_set
- C++标准模板库(STL)unordered_map
- C++标准模板库(STL)algorithm算法库
- C++文件操作
- C++数学库(cmath)数学常量与数学函数
- C++模板:函数模板、类模板
- C++与SQLite3联合打造实用的应用程序
- C++实战开发中常用的库(概述)
- 第二部分:C++面向对象编程
- C++:类的定义与声明、类对象应用
- 第三部分:数据结构与算法(概述)
- 第一部分:C++语言简介与学习路线