Object oriented programming lets us program naturally in new domains, domains that not necessarily have types in the native language that fit the domains. So for example, we might want to write programs that involve manipulation of colors. Imagine having a windowing system and inside your windowing system you have different menu options. And possibly within the window options, you're using color to add different levels of expressivity. So you might want a color type. This is a simple form of type extensibility, typically colors could be defined as a small, discrete set of items. So here we see, an enumerated type which is one form of type extensibility in the C++ language. That has a color RED, a color WHITE, and a color GREEN. Now, with these colors, this is basically a form of simple integer type, and the reason we use capital RED is that's just, that's an identifier, that's an enumerator. So enum id. And capitalization. Are a convention. They just highlight that, we're expressing a form of integer constant. And red, when no value is specified, will be automatically assigned zero. That's in the old grand tradition of the C community. Everything starts at zero. WHITE will be 1, and GREEN will be 2. And that's what we'll do normally. We also will have the ability to override these values by being explicit. We could say, white is 3. And that would mean, that red starts zero, white starts at three, and then the sequence continues from three to four. Now, why should we use enum? Some of you have experienced enum. Enum was added even to the C language, and in many other programming languages, there are enumerated types. It's a multiple choice question, just take a second, Can you use a named integer instead of an enumerated type to get that kind of constant? Can you use a #define much like in the pre processor keeping C old style, for these enumerator constants like red and white. Or is it best to have a small related set of constants? So which reason exists for using enum? It is quite true that, you can just use cost declaration for example, if you wanted true and false as two related constants, we can say, constant TRUE is 1 and constant, FALSE is 0 then we would have that. We can also use this in old C style, but again, there's safety issues. But enumerated types are even better than either of these others, where there is a grouping of related constants. Where you wanna think about as type extensibility and not just arbitrary name integer constants.