Enumerazioni
A volte puo` essere utile poter definire un nuovo tipo estensionalmente, cioe`
elencando esplicitamente i valori che una variabile (o una costante) di quel
tipo puo` assumere. Tali tipi vengono detti enumerati e sono definiti
tramite la keyword enum con la seguente sintassi:
enum < NomeTipo > {
< Identificatore >,
/* ... */
< Identificatore >
};
Esempio:
enum Elemento {
Idrogeno,
Elio,
Carbonio,
Ossigeno
};
Elemento Atomo = Idrogeno;
Gli identificatori Idrogeno , Elio , Carbonio
e Ossigeno costituiscono l'intervallo dei valori del tipo Elemento .
Si osservi che come da sintassi, i valori di una enumerazione devono essere
espressi tramite identificatori, non sono ammessi valori espressi in altri modi
(interi, numeri in virgola mobile, costanti carattere...), inoltre gli identificatori
utilizzati per esprimere tali valori devono essere distinti da qualsiasi altro
identificatore visibile nello scope dell'enumerazione onde evitare ambiguita`.
Il compilatore rappresenta internamente i tipi enumerazione associando a ciascun
identificatore di valore una costante intera, cosi` che un valore enumerazione
puo` essere utilizzato in luogo di un valore intero, ma non viceversa:
enum Elemento {
Idrogeno,
Elio,
Carbonio,
Ossigeno
};
Elemento Atomo = Idrogeno;
int Numero;
Numero = Carbonio; // Ok!
Atomo = 3; // Errore!
Nell'ultima riga dell'esempio si verifica un errore perche` non esiste un operatore
di conversione da int a Elemento , mentre essendo i
valori enumerazione in pratica delle costanti intere, il compilatore e` in grado
di eseguire la conversione a int . E` possibile forzare il valore
intero da associare ai valori di una enumerazione:
enum Elemento {
Idrogeno = 2,
Elio,
Carbonio = Idrogeno - 10,
Ferro = Elio + 7,
Ossigeno = 2
};
Non e` necessario specificare un valore per ogni identificatore dell'enumerazione,
non ci sono limitazioni di segno e non e` necessario usare valori distinti (anche
se cio` probabilmente comporterebbe qualche problema). Si puo` utilizzare anche
un identificatore dell'enumerazione precedentemente definito.
La possibilita` di scegliere i valori da associare alle etichette (identificatori)
dell'enumerazione fornisce un modo alternativo di definire costanti di tipo
intero.
|