enum Pets{dog, cat, mouse};
Pets fido;
fido = dog;
Try this for an analogy. Pretend there is no int data type, so you create one:
create data type int {-32767...32767};
int x;
x = 32767;
Like the quoted post originally said, enums are not separate data types (like int, double, etc), but to get a grasp on them you can think of them that way.Using = below to mean "is similar to", then in the analogy,
enum = create data type
Pets = int
{dog, cat, mouse} = {-32767...32767}
fido = x
dog = 32767
enum "creates" the data type Pets, the way "create data type" creates the data type int.
{dog...} gives the allowed values for data type Pets the way {32767...} gives the allowed values for data type int.
fido is a variable of type Pets the way x is a variable of type int.
The values fido can have are dog, cat, or mouse, the way x can have a value from -32767 to +32767.
Got that part? Ok.
Then, to say enums are really integers, that they're just nicknames or aliases, is to say that enum Pets{dog, cat, mouse}, Pets fido, fido = dog is the same as saying int fido = 0. If you're working with a program involving pets, maybe for a vet, it can make your code easier to read if you write fido instead of x, and dog or cat instead of 0 or 1. In an if statement, for example, if (fido = dog) may be clearer than if (x = 0). You never have to use enums.
One other value they have is restricting the values you can use. If you used int, you might get somewhere an erroneous value of 5 for x. But say values for x in your program should never go over 2. Using enum, you have no value for 5. In fact, 5 in the form of an int is not an allowed value for Pets.
Hope that helps.