Enumerated types let us define our own type where all of the possible values are enumerated. These are great for categorizing things.
Enum classes work like enums but offer more type safety and don’t pollute the encapsulating namespace quite as much.
And finally, structs offer us a way to group related variables into a single structure and access them using the member selection operator (.). Object-oriented programming builds heavily on top of these, so if you learn one thing from this chapter, make sure it’s this one.
In designing a game, we decide we want to have monsters, because everyone likes fighting monsters. Declare a struct that represents your monster. The monster should have a type that can be one of the following: an ogre, a dragon, an orc, a giant spider, or a slime. Use an enum class for this.
Each individual monster should also have a name (use a std::string), as well as an amount of health that represents how much damage they can take before they die. Write a function named printMonster() that prints out all of the struct’s members. Instantiate an ogre and a slime, initialize them using an initializer list, and pass them to printMonster().
Your program should produce the following output:
This Ogre is named Torg and has 145 health. This Slime is named Blurp and has 23 health.