enum的用法

enum的用法如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。

  举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!

enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。

  这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义!

enum box{pencil,pen};

enum box box2;//或者简写成box box2;

  再有一种就是在声明的时候同时定义。

enum {pencil,pen}box,box2; //在声明的同时进行定义!

  枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作!

enum box{pencil=1,pen=2};

但是这里要特别注意的一点是,如果你不进行元素赋值操作那么元素将会被系统自动从0开始自动递增的进行赋值操作,说到自动赋值,如果你只定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作,例如

enum box{pencil=3,pen};//这里pen就是4系统将自动进行pen=4的定义赋值操作!

  前面说了那么多,下面给出一个完整的例子大家可以通过以下的代码的学习进行更完整的学习!

#include <iostream>
using namespace std;

void main(void)
{
    enum egg {a,b,c};
    enum egg test; //在这里你可以简写成egg test;

     test = c; //对枚举变量test进行赋予元素操作,这里之所以叫赋元素操作不叫赋值操作就是为了让大家明白枚举变量是不能直接赋予算数值的,例如(test=1;)这样的操作都是不被编译器所接受的,正确的方式是先进行强制类型转换例如(test = (enum egg) 0;)!

    if (test==c)
     {
        cout <<"枚举变量判断:test枚举对应的枚举元素是c" << endl;
     }

    if (test==2)
     {
        cout <<"枚举变量判断:test枚举元素的值是2" << endl;
     }

    cout << a << "" << b << "" << test <<endl;

     test = (enum egg) 0; //强制类型转换
    cout << "枚举变量test值改变为:" << test <<endl;
    cin.get();
}

  看到这里要最后说一个问题,就是枚举变量中的枚举元素(或者叫枚举常量)在特殊情况下是会被自动提升为算术类型的!

#include <iostream>
using namespace std;

void main(void)
{
    enum test {a,b};
    int c=1+b; //自动提升为算术类型
    cout << c <<endl;
    cin.get();
}

转自:http://hi.baidu.com/hongyouqun/blog/item/6885d412e9e216045aaf538c.html

### Java 枚举类型 (enum) 的使用教程 #### 创建枚举类型的语法结构 在 Java 中,`enum` 类型可以被看作是一个特殊的类。创建 `enum` 需要使用关键字 `enum` 并为其指定名称以及一系列固定的常量值[^1]。 ```java public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } ``` #### 向枚举添加字段和方法 除了简单的声明外,还可以像普通类一样给 `enum` 添加私有字段、构造函数及公共的方法来增强功能。 ```java public enum Planet { MERCURY (3.303e+23, 2.4397e6), VENUS (4.869e+24, 6.0518e6), EARTH (5.976e+24, 6.37814e6); private final double mass; private final double radius; Planet(double mass, double radius) { this.mass = mass; this.radius = radius; } public double getMass() {return mass;} public double getRadius(){return radius;} // Additional methods can be added here... } ``` #### 获取特定枚举实例 通过调用静态工厂方法 `valueOf()` 可以根据字符串形式的名字返回对应的枚举实例[^2]。 ```java Day day = Day.valueOf("MONDAY"); System.out.println(day); ``` #### 访问所有枚举成员 利用 `values()` 方法能够获取到当前枚举类型下的全部枚举项数组。 ```java for(Day d : Day.values()){ System.out.println(d); } ``` #### 获得枚举元素的位置序号 每个枚举实例都有一个唯一的顺序编号可以通过 `ordinal()` 函数获得它相对于第一个定义的偏移位置[^3]。 ```java Planet earth = Planet.EARTH; int index = earth.ordinal(); System.out.println(index); ``` #### 对象哈希码计算 对于每一个具体的枚举对象来说,都支持默认实现来自 Object 类中的 `hashCode()` 方法用于散列映射操作[^4]。 ```java Set<Planet> planets = new HashSet<>(); planets.add(Planet.MARS); // Using the hash code implicitly when adding to a set. if(planets.contains(Planet.MARS)){ System.out.println("Mars is present."); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值