В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Преобразование из одного перечисляемого типа в другой происходит через целочисленный тип (возможно, базовый тип источника, не уверен).
Неявное преобразование перечисления в целочисленный тип разрешено как в C, так и в C ++. Неявное преобразование целочисленного типа в enum разрешено в C, но не в C ++.
По сути, C ++ более безопасен по типу. Он пытается помешать вам делать это:
enum {zero, one, two} x;
x = 143; // assigns a value outside the range of the enum
Если вы хотите выполнить преобразование enum-enum в C ++, вы можете использовать typeof / declspec / boost typeof или эквивалент. В GCC:
int main() {
enum {zero, one, two} x;
enum {zero1, one1, two1} y = two1;
typedef typeof(x) xtype;
x = static_cast<typeof(x)>(y);
}
Однако обычно это не имеет смысла. Для большинства целей перечисления (особенно анонимные) являются «перечислимыми типами». Они просто «реализованы» стандартами C и C ++ как целые числа в забавных шляпах, но это не значит, что красный
«равно» молоток
только потому, что они каждый появляется первым в двух разных перечислениях (цвета и инструменты соответственно). static_cast
предполагает, что существует связь между двумя задействованными типами. Любые два перечислимых типа «связаны» тем, что оба имеют базовый целочисленный тип, и они связаны, так что «отношение» там на самом деле мало что говорит. Если вы напишете этот код, вы получите довольно плохую версию безопасности типов.
Я предполагаю, что это связано с более строгим набором текста в C ++.
В C x = 5;
также компилируется. В C ++ этого не произойдет, потому что преобразование типов не определено. По этой же причине x = y не компилируется.
Вы можете посмотреть этот пример на кодовой панели , который дает более подробное описание ошибки, чем ваш компилятор.
Компилятор не знает, как неявно преобразовать один перечисляемый тип данных в другой.
Попробуйте следующее.
enum typeX { one } x;
enum typeY { two } y;
x = (typeX) y;