O tipo enum é composto de um ou mais constantes que são declaradas como seus membros.
Se os membros não forem iniciados, os valores iniciados 0 a N elementos é utilizado como padrão
e associado a cada elemento.
Se um membro for iniciado com um determinado valor, os membros seguintes sem terão seus
valores baseados nesse membro, sendo incrementando em 1 quando não possuam seus valores pre-definidos.
Abaixo, a sintaxes A e B mostram a definição de um enumerador e seu uso na declaração de uma
variável respectivamente. Na sintaxe A, os [valores] atribuídos são opcionais.
Sintaxe A
enum nome_enum
{
MEMBRO1 = [valor1], //0 padrão
MEMBRO2 = [valor2], //1 padrão
MEMBRON = [valorN] //N padrão
};
Sintaxe B
enum nome_enum nome_variavel;
enum nome_enum nome_variavel= valor;
Por serem constantes os membros de um enumerador, por boa práticas, seus nomes são declarados
em caixa alta. Para nomes compostos, utilizar Snake Case.
Exemplo 1
#include <iostream>
using namespace std;
enum valor_opcao
{
ZERO, UM, DOIS, TRES
};
int main ()
{
enum valor_opcao opcao;
return 0;
}
Em C++, diferente enumeradores não podem ser ter seus membros declarados com nomes de membros
já utilizados em outros enumeradores.
Exemplo 2
#include <iostream>
using namespace std;
enum enumerador1 { ELEMENTO1, ELEMENTO2, }
enum enumerador2 { ELEMENTO1, ELEMENTO2 }
int main(void)
{
}
Saída
main.cpp:6:20: error: ‘ELEMENTO1’ conflicts with a previous declaration
6 | enum enumerador2 { ELEMENTO1, ELEMENTO2 }
| ^~~~~~~~~
main.cpp:4:20: note: previous declaration ‘enumerador1 ELEMENTO1’
Acessando membros
O acesso aos membros de um enum ou enumerador, diferente de unions e struct, é feito pelo
próprio nome do membro:
Sintaxe
NOME_MEMBRO_ENUM;
Exemplo 3
#include <iostream>
using namespace std;
enum valor_opcao
{
ZERO, UM, DOIS, TRES
};
int main ()
{
enum valor_opcao opcao = TRES;
cout << opcao;
return 0;
}
Saída
3