2010-01-17 22 views

Respuesta

13

En C++, una enumeración es solo un conjunto de constantes integrales con nombre. En Java, una enumeración es más como una instancia nombrada de una clase. Usted tiene la capacidad de personalizar los miembros disponibles en la enumeración.

Además, C++ convertirá implícitamente los valores enum a su equivalente integral, mientras que la conversión debe ser explícita en Java.

Más información disponible en Wikipedia.

+0

Nota: C++ va a convertir de manera implícita los valores de enumeración a su equivalente integral cuando no hay declaración de la clase que le precede. –

3

Las enumeraciones en C/C++ son enteros simples.

Las enumeraciones en Java son objetos, pueden tener métodos (con un comportamiento diferente de una instancia enum a otra). Además, la clase enum proporciona métodos que permiten la iteración sobre todas las instancias enum y la búsqueda de una instancia enum.

C++:

typedef enum { Red, Yellow, Green } Colors; 

void canCrossIntersection(Colors c) { 
    return c == Green; 
} 

Java:

public enum Colors { 
    RED(false), 
    Yellow(false), 
    Green(true) 
    ; 

    Color(boolean b) { this.b = b; } 
    private boolean b; 

    public boolean canCrossIntersection() { return b; } 
} 
+1

Un efecto importante de las enumeraciones en objetos Java es que son verdaderamente seguras para tipos: solo puede pasar valores válidos a métodos que esperan un valor enum.En C, puede pasar fácilmente '253', que puede o no asignarse a un valor enum válido. –

+1

Joachim Sauer, su punto es correcto pero irrelevante, la pregunta es acerca de C++ donde las enumeraciones * son * tipo-seguras. – avakar

0

Una gran característica de Java Enums que le falta en C++ es el nombre ( método). De esta forma, puede obtener el nombre de valor de Enum (como está escrito en la definición enum) sin ninguna línea adicional de código en la definición. Por ejemplo:

enum Type {T1, T2, T3} 
Type t = Type.T1; 
System.out.println(t.name()); // prints T1 
16

En C++ una enumeración es solo una lista de valores enteros. En una enumeración de Java es una clase de enumeración que se extiende y es más una buena manera de escribir:

class MyEnum extends Enum<MyEnum> 
{ 
public final static MyEnum VE01 = new MyEnum(); 
public final static MyEnum VE02 = new MyEnum(); 
} 

como enumeración:

enum MyEnum 
{ 
VE01,VE02; 
} 

para los métodos de enumeración ver this. Dado que un enum de Java es un objeto, admite todo lo que hace un objeto Java normal. como darles valores o funciones:

enum Binary{ 
ZERO(0),ONE(1); 
Binary(int i) 
{ 
    value = i; 
} 
public final int value; 
} 

una agradable es clases anónimas:

enum State{ 
StateA{ 
    public State doSomething() 
    { 
    //state code here 
    return StateB; 
    } 
}, 
StateB{ 
    public State doSomething() 
    { 
     return StateA; 
    } 
}; 
public abstract State doSomething(); 
} 
+1

@ buena publicación. gracias – q0987

1

En Java se puede incluso emulado enumeraciones extensibles dejando a implementar la misma interfaz y luego añadir la totalidad de su valores a algún tipo de colección llamando a su método de valores().

1

Para una respuesta semielaborada ... C++ 0x Los enunciados fuertemente tipados traen muchos de los beneficios de Java Enums a C++: mecanografía fuerte, alcance, etc. Si su compilador es compatible con C++ 0x Enumeraciones muy tipadas, debería considerar usarlas.

Referencia: http://www2.research.att.com/~bs/C++0xFAQ.html#enum

Cuestiones relacionadas