Разница Enum между Java и C ++? - PullRequest
       7

Разница Enum между Java и C ++?

10 голосов
/ 17 января 2010

Я изучаю Enums в Java. Мне бы хотелось узнать, в чем заключаются основные различия Enum в Java и C ++. Спасибо

Ответы [ 6 ]

16 голосов
/ 17 января 2010

В c ++ перечисление - это просто список целочисленных значений. В java enum - это класс, который расширяет Enum и более удобен для написания:

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

как перечисление:

enum MyEnum
{
 VE01,VE02;
}

Методы enum см. this . Поскольку перечисление java является объектом, оно поддерживает все, что делает обычный объект java. как давая им значения или функции:

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

хороший анонимный класс:

enum State{
StateA{
   public State doSomething()
   {
     //state code here
     return StateB;
    }
},
StateB{
    public State doSomething()
    {
       return StateA;
    }
};
public abstract State doSomething();
}
13 голосов
/ 17 января 2010

В C ++ перечисление - это просто набор именованных целочисленных констант. В Java перечисление больше похоже на именованный экземпляр класса. У вас есть возможность настроить членов, доступных в перечислении.

Кроме того, C ++ будет неявно преобразовывать значения перечисления в их интегральный эквивалент, тогда как преобразование должно быть явным в Java.

Более подробная информация доступна в Википедии .

3 голосов
/ 17 января 2010

Перечисления в C / C ++ представляют собой простые целые числа.

Перечисления в Java являются объектами - они могут иметь методы (с различным поведением от одного экземпляра перечисления к другому). Более того, класс enum предоставляет методы, которые позволяют выполнять итерацию по всем экземплярам enum и поиск экземпляра 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 голос
/ 14 октября 2010

Для полуответа ... C ++ 0x Сильно типизированные перечисления приносят многие преимущества Java Enums для C ++: строгая типизация, область видимости и так далее.Если ваш компилятор поддерживает C ++ 0x строго типизированные перечисления, вы должны рассмотреть возможность их использования.

Ссылка: http://www2.research.att.com/~bs/C++0xFAQ.html#enum

1 голос
/ 17 января 2010

В Java вы даже можете эмулировать расширяемые перечисления, позволяя им реализовывать один и тот же интерфейс, а затем добавлять все их значения в какую-то коллекцию, вызывая их метод values ​​().

0 голосов
/ 17 января 2010

Отличительной особенностью Java Enums, которой не хватает в C ++, является метод name () . Таким образом, вы можете получить имя значения Enum (как написано в определении enum) без дополнительной строки кода в определении. Например:

enum Type {T1, T2, T3}
Type t = Type.T1;   
System.out.println(t.name()); // prints T1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...