Java枚举类和c++枚举类比较

3 篇文章 0 订阅

详细阅读了相关java和c++有关枚举类的介绍。做一个总结 。

   枚举类型使我们可以将一组常量组织在一起,和类一样,每个枚举类型定义了一种新的类型。java和c++不同之处在于:

  c++的枚举类型只能是整形常量(int 、long、short)。

  java的枚举类是一个继承于Enum(java.lang.Enum 是一个抽象类)的自定义类。所以我们可以使用Enum中的方法,也可以任意扩展枚举  类属性和方法。

  从定义角度来看java的枚举类型灵活度更高。


       C++中的枚举类型:

    在c++11中枚举类型被分为限定作用域和不限定作用域。限定作用域的定义格式如下:

enum class (struct)[EnumeName] {<item1>, <item2>...<itemi>}[name];

    非限定作用域的定义格式如下:

enum [EnumeName] {<item1>, <item2>...<itemi>}[name]; 

说明:

[]:表示可选,可以有,也可以缺省不写;

EnumeName:枚举的类型名;

name:枚举的对象名;

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

 enum color {red, yellow, blue}; //不限定
enum class peper {red, yellow, blue}; //限定
 color eyes = blue;   //正确
 peper p = blue; //错误
peper p = peper::blue; //正确

1,枚举成员默认从0开始,依次加1;

2,可以在定义枚举类型时给一个或几个成员指定值;

3,枚举成员是const的,初始化枚举成员时提供的初始化值必须是常量表达式;

4,枚举成员本身就是常量表达式,因此,可在任可需要用到常量值的地方使用枚举成员;

c++11中 我们可以通过在enmu的名字后加上冒号来 指定我们想要使用的类型(但只能指定整形类型)。指定类型后,一旦超出范围则会引发错误。默认情况下 限定作用域成员类型为int。不限作用域成员类型是潜在类型(就是说一定不会超出范围)如下:

enum intvalue : unsigned long{
a = 255, b = 666, c=1024
}
   

Java中的枚举类型:  

Java 中的枚举类型采用关键字enum 来定义,是一个特殊的类,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。Enum的定义如下:

public abstract class Enum<E extends Enum<E>>extends Object implements Comparable<E>, Serializable

【例1】枚举的简单使用

enum Move{left, right, up, down};  
public static void main(String args[]) {  
    System.out.println(Move.left);  
    System.out.println(Move.right);  
    System.out.println(Move.up);  
    System.out.println(Move.down); 

结果如下:

left

right

up

Down

上面这段代码中,Move其实是一个类,应该是一个Enum的子类。left, right, up, down是Enum的对象,应该是Move类中public static成员,Move中还有三个 static方法:

public static Move[] values();

public static Move Move.valueOf(String name);

public static T Move.valueOf(Class<T> enumType, String name);


java枚举类的switch用法:

enum Signal {  
    GREEN, YELLOW, RED  
}  
public class TrafficLight {  
    Signal color = Signal.RED;  
    public void change() {  
        switch (color) {  
        case RED:  
            color = Signal.GREEN;  
            break;  
        case YELLOW:  
            color = Signal.RED;  
            break;  
        case GREEN:  
            color = Signal.YELLOW;  
            break;  
        }  
    }  
}  
  注意到 switch在使用枚举常量时候,不必在每个标签指明枚举名,可以由switch表达式值来确定.

因为java枚举类型是自定义类,所以其可以扩展各种属性和方法

public enum size
{
SMALL("S"),MEDIAN("M"),LARGE("L");
private String abbervation;
private Size(String abbervation){
this.abbervation = abbervation;
}
public String getAbbervation(){
return abbervation
}

参考文献:

java 枚举类

java枚举类常见用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值