枚举enum

本文详细介绍了C++中枚举类型(包括限定作用域的enumclass和不限定作用域的enum)的概念、定义方式、作用域规则、枚举成员特性以及如何为枚举成员指定值。理解这些有助于提升C++编程的灵活性和代码可读性。

枚举类型enum

C++中,枚举类型(enumeration) 是一个被命名的整型常量的集合。和类一样,每个枚举类型定义了一种新的类型。枚举属于字面值常量类型。C++包含两种枚举:限定作用域的和不限定作用域的。

限定作用域的枚举类型

限定作用域的枚举类型(scoped enumeration)定义形式如下:

enum class open_modes {input, output, append};

首先是关键字enum class(或者是等价的使用enum struct),随后是枚举类型名字以及用花括号括起来的以逗号分隔的枚举成员(enumerator),最后加上分号。上面的函数定义了一个名为open_modes的枚举类型,它包含三个枚举成员:input、output、append。

不限定作用域的枚举类型

不限定作用域的枚举类型(unscoped enumeration)定义时省略掉关键字class(或struct),枚举类型的名字是可选的,如果enum是未命名的,则我们只能在定义该enum时定义它的对象。

enum color {red, yellow, green};	//不限定作用域的枚举类型
enmu {floatPrec = 6, doublePrec = 10, double_doublePrec = 10}; 	//未命名的、不限定作用域的枚举类型

枚举成员

作用域

在限定作用域的枚举类型中,枚举成员遵循常规的作用域准则,并且在枚举类型的作用域外是不可访问的。与之相反,在不限定作用域的枚举类型中,枚举成员的作用域与枚举本身的作用域相同:

enum color {red, yellow, green};			//正确,不限定作用域的枚举类型
enum stoplight {red, yellow, green};		//错误,重复定义了枚举成员
enum class peppers {red, yellow, green};	//正确,枚举成员被隐藏了
color eyes = green;							//正确,不限定作用域的枚举类型的枚举成员位于有效的作用域中
peppers p = green;							//错误,peppers的枚举成员不在有效的作用域中,color::green在有效的作用域中,但是类型错误
color hair = color::red;					//正确,允许显示的访问枚举成员
peppers p2 = peppers::red;					//正确,使用peppers的red
枚举值

默认情况下,枚举值从0开始,依次加1。不过我们也能为一个或几个枚举成员指定专门的值,并且枚举值不一定唯一。

enum class intTypes {
    charTyp = 8, shortTyp = 16, intTyp = 16, longTyp = 32, long_longTyp = 64
};

枚举成员是const,因此在初始化枚举成员时提供的初始值必须是常量表达式。

### 枚举enum)在编程中的用法 枚举类型是一种用户自定义的数据类型,通常用于表示一组固定的常量集合。这种数据结构可以提高程序的可读性和可维护性[^2]。 #### Java 中的 Enum 使用 在 Java 中,`enum` 是一种特殊的类,它可以被看作是一个具有固定成员列表的类。这些成员通常是不可变的对象实例。由于 `enum` 的特性,它们可以直接用于 `switch` 语句中[^1]: ```java public class Main { public static void main(String[] args) { DayOfWeek day = DayOfWeek.MONDAY; switch (day) { case MONDAY: System.out.println("Start of the work week."); break; case FRIDAY: System.out.println("End of the work week."); break; default: System.out.println("Another day..."); } } enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } } ``` 上述代码展示了如何利用 `enum` 定义一周的日子,并将其作为参数传递给 `switch` 语句来执行不同的逻辑操作。 #### C/C++ 中的 Enum 使用 在 C 和 C++ 编程语言里,`enum` 关键字主要用于创建一系列命整数常量。尽管不像高级语言那样功能强大,但它仍然有助于增强代码清晰度和减少错误可能性[^3]: ```c #include <stdio.h> int main(void){ enum Color { RED=0xFF0000, GREEN=0x00FF00, BLUE=0x0000FF }; int selectedColor = GREEN; if(selectedColor == RED){ printf("#%X\n",RED); }else if(selectedColor == GREEN){ printf("#%X\n",GREEN); }else{ printf("#%X\n",BLUE); } return 0; } ``` 在这个例子中,我们定义了一个为 `Color` 的枚举类型并初始化了一些颜色值。接着通过简单的条件判断打印出对应的颜色十六进制码。 #### Python 中的 Enum 使用 从 Python 3.4 开始引入了标准库模块 `enum` 来支持枚举类型的声明与使用;而在 Python 3.10 及之后版本,则进一步增强了内置的支持程度使其更接近传统意义上的枚举行为模式: ```python from enum import Enum class Season(Enum): SPRING = 'spring' SUMMER = 'summer' AUTUMN = 'autumn' WINTER = 'winter' def describe_season(season:Season)->str: match season.name.lower(): case "spring": description="Flowers bloom." case "summer": description="Sun shines brightly." case _ : description=f"{season.value.capitalize()} weather is here!" return f"In {season.name}, "+description print(describe_season(Season.SPRING)) ``` 这里演示了怎样借助于新加入的关键字 `match-case`(类似于其他语言里的 `switch`) 结合枚举变量一起工作以生成季节描述字符串。 --- ### 总结 无论是在哪种主流编程语言环境下,合理运用好枚举类型都能让我们的源代码变得更加直观易懂同时也降低了潜在风险因素的存在几率。以上分别介绍了几种不同风格的语言对于该特性的具体实践方法论及其优势所在之处.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值