C++ Enumerations with a Comprehensive Example:
In C++, enumerations (enums) are user-defined data types consisting of named integer constants, enhancing readability, maintainability, and type safety for sets of constants.
Key Concepts:
- Declaration: Use the
enum
keyword followed by a name and curly braces:
C++
enum class Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY };
- Accessing values: Use the enum name and member name:
C++
Weekday today = Weekday::THURSDAY;
std::cout << "Today is " << today << std::endl;
- Implicit values: By default, members start from 0 and increment by 1. Use assignment to change this:
C++
enum class Suit { CLUBS = 1, DIAMONDS, HEARTS, SPADES };
Scope: Enum members have the same scope as the
enum
declaration. Usetypedef
for global scope.Enum classes: Encapsulate enums for better control and access control. Example:
C++
enum class Day {MONDAY, TUESDAY};
int get_day_index(Day day) {
return static_cast<int>(day); // Assumes Day is an enum class
}
Advantages of using enums:
- Readability: Self-explanatory names instead of magic numbers.
- Maintainability: Change constant values in one place affects all usages.
- Type safety: Prevents accidental assignment of incompatible values.
- Switch statements: Use enum values in
switch
statements for cleaner code.
Combined Program Example (Traffic Light Controller):
C++
#include <iostream>
#include <chrono>
#include <thread>
enum class TrafficLight { RED, YELLOW, GREEN };
TrafficLight currentLight = TrafficLight::RED;
void displayLight(TrafficLight light) {
switch (light) {
case TrafficLight::RED:
std::cout << "Red light: STOP!\n";
break;
case TrafficLight::YELLOW:
std::cout << "Yellow light: CAUTION!\n";
break;
case TrafficLight::GREEN:
std::cout << "Green light: GO!\n";
break;
}
}
void changeLight(TrafficLight& light) {
int duration;
switch (light) {
case TrafficLight::RED:
duration = 3;
light = TrafficLight::YELLOW;
break;
case TrafficLight::YELLOW:
duration = 1;
light = TrafficLight::GREEN;
break;
case TrafficLight::GREEN:
duration = 5;
light = TrafficLight::RED;
break;
}
std::this_thread::sleep_for(std::chrono::seconds(duration));
}
int main() {
while (true) {
displayLight(currentLight);
changeLight(currentLight);
}
return 0;
}
Key Points:
- The program uses an enum class
TrafficLight
to represent traffic light states. - The
displayLight
function displays a message according to the current light. - The
changeLight
function changes the light state and waits for a specific duration. - This example demonstrates how enums can improve code readability and maintainability.
Remember:
- Consider using
enum class
by default for better encapsulation and safety. - Choose appropriate variable names and values for clarity.
- Use enums responsibly and efficiently to enhance your C++ code.
Comments
Post a Comment