Я новичок в 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),
};
Я нашел эти ссылки, когда искал тему:
Который, как видите, оставил несколько вопросов.
Нет, вы не можете делать ничего из этого.
Тем не менее, вы можете предоставить определение перечисление после его декларация как:
enum MyEnum; //declaration
enum MyEnum //definition
{
HELLO = 0,
WORLD = 1;
};
Могу ли я присвоить значения номеру?
Нет, это не имеет смысла. У номера уже есть значение. Это постоянно.
Пожалуйста, получите вводную книгу по программированию на C ++. Вот несколько рекомендаций:
Прежде всего, вы не можете Когда-либо присвоить значение в C ++. Следующее незаконно:
42 = 23;
И по той же причине вы не можете присвоить значение перечисления.
Кроме того, вы не можете даже использование значения перечисления после его объявления (т.е. вы не можете написать auto x = enum_name::name;
), только после определение. Вы можете использовать только имя enum.
Могу ли я присвоить значения номеру?
Я не уверен, что это должно означать, но кроме того, что я сказал раньше, этот синтаксис в любом случае является незаконным. То есть вы не можете получить доступ ко второму значению перечисления, написав enum_name::1
,
Как работает класс enum при использовании структуры или класса в качестве базового типа?
Вы не можете использовать пользовательские типы в качестве базовых типов, только встроенные целочисленные типы.