Присвоение значений после определения перечисления

Я новичок в C ++ и особенно в C ++ 11, поэтому, поскольку я теперь им пользуюсь, возникло несколько вопросов о enum и enum class:

Могу ли я присвоить значения после того, как перечисление было объявлено?

enum MyEnum;
MyEnum::HELLO = 0;
MyEnum::WORLD = 1;

Могу ли я присвоить значения номеру? (напр .: Myenum :: 0 = 2)

enum MyEnum;
MyEnum::0 = 16;
MyEnum::1 = 24;
MyEnum::3 = 64;

Как работает класс enum при использовании структуры или класса в качестве базового типа?

Будут ли записи в перечислении допустимыми экземплярами структуры / класса?

class Test {
private int v = 0;
Test(int v) {
this->v = v;
}
};

enum class MyEnum : Test {
Test0 = new Test(0),
Test1 = new Test(1),
};

Я нашел эти ссылки, когда искал тему:

Который, как видите, оставил несколько вопросов.

1

Решение

Нет, вы не можете делать ничего из этого.

Тем не менее, вы можете предоставить определение перечисление после его декларация как:

enum MyEnum; //declaration

enum MyEnum  //definition
{
HELLO = 0,
WORLD = 1;
};

Могу ли я присвоить значения номеру?

Нет, это не имеет смысла. У номера уже есть значение. Это постоянно.


Пожалуйста, получите вводную книгу по программированию на C ++. Вот несколько рекомендаций:

4

Другие решения

Прежде всего, вы не можете Когда-либо присвоить значение в C ++. Следующее незаконно:

42 = 23;

И по той же причине вы не можете присвоить значение перечисления.

Кроме того, вы не можете даже использование значения перечисления после его объявления (т.е. вы не можете написать auto x = enum_name::name;), только после определение. Вы можете использовать только имя enum.

Могу ли я присвоить значения номеру?

Я не уверен, что это должно означать, но кроме того, что я сказал раньше, этот синтаксис в любом случае является незаконным. То есть вы не можете получить доступ ко второму значению перечисления, написав enum_name::1,

Как работает класс enum при использовании структуры или класса в качестве базового типа?

Вы не можете использовать пользовательские типы в качестве базовых типов, только встроенные целочисленные типы.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector