ma se io dichiaro una stringa di valori esempio { lun - mart - merc ecc ecc } perchè enum è identificata dal tipo di dato int?
Perché quelle stringhe sono utilizzate solo all'interno del testo del tuo programma sorgente.
Ma i valori presenti in memoria durante l'esecuzione del programma sono valori interi corrispondenti.
Dato che un intero occupa una certa quantità di memoria, a volte non necessaria, è possibile indicare anche che il tipo di dato utilizzato per la memorizzazione sia un altro, come il byte, che occupa meno spazio.
Se ancora non ti è chiaro, devi concentrarti sul fatto che le stringhe "Lun", "Mar" e così via *NON* sono memorizzate nella variabile che userai per l'enumerazione; al loro posto, *durante l'esecuzione*, nella variabile andrà il corrispondente valore numerico.