I think my questions don't have an easy answer right now. I feel a natural progression will lead me into a situation where I will say to myself "hey, enums would be useful here!". Then it'll click into place. That's the theory anyway.
I'm against the idea that everything in C++ is a treasure chest full of secrets. dwks gave you about as thorough an answer as you need.
And just to explain the example in the original post, you should be thinking: Well, a traffic light has 3 lights, red, yellow, and green. Using an enum is one way of making these three states understandable.
You could also do:
Code:
const int RED = 0, YELLOW = 1, GREEN = 2;
But note that enums give the constants a type name, so they are somewhat more cohesive. You should think of enums as finite sets of constants. You can refer to the named constants, specifically, by their type name.
Code:
enum LightColor {RED, YELLOW, GREEN};
In C++, that is pretty much all they are. If you make the topic too broad, you will confuse yourself.
Well, if it helps... personally I am very suspicious of video lessons -- it really depends on the source. JRandomLoser is probably teaching you the way he learned, which is not always a complete treatment of the subject or useful.
The bit about references that you refer to is a stylistic choice.
Code:
void function (int &functionChoice);
A reference and a void return type can be used instead of a return value. In some cases this is a compromise. Say you want to return two things, or maybe the actual return value is already used to do something else. Then, you have limited choices in front of you.