Enums
C++ Enumerations
In C++, an enumeration (enum) is a user-defined data type that consists of a set of named integer constants. Enumerations provide a way to create symbolic names for values, making the code more readable and less error-prone. Enumerations are often used to define a set of related named constants.
Basic Example:
#include <iostream>
// Define an enumeration named "Color"
enum Color {
RED,
GREEN,
BLUE
};
int main() {
// Declare a variable of type "Color"
Color myColor = GREEN;
// Use the enum values
if (myColor == RED) {
std::cout << "The color is red." << std::endl;
} else if (myColor == GREEN) {
std::cout << "The color is green." << std::endl;
} else {
std::cout << "The color is blue." << std::endl;
}
return 0;
}
In this example, the Color enum consists of three named constants: RED, GREEN, and BLUE. You can use these constants to represent different colors in your program.
Enumerators and Underlying Type:
By default, the underlying type of an enum is int, and the enumerators are assigned consecutive integer values starting from 0. You can explicitly specify the underlying type and set specific values for enumerators:
#include <iostream>
// Enum with explicit underlying type and values
enum class Status : char {
OK = 0,
ERROR = -1,
PENDING = 1
};
int main() {
// Declare a variable of type "Status"
Status myStatus = Status::OK;
// Use the enum values
if (myStatus == Status::OK) {
std::cout << "Operation successful." << std::endl;
} else if (myStatus == Status::ERROR) {
std::cout << "Error occurred." << std::endl;
} else {
std::cout << "Operation is pending." << std::endl;
}
return 0;
}
In this example, the Status enum has an underlying type of char, and the enumerators have explicit values.
Enum Class (Scoped Enumerations):
C++11 introduced enum classes, which provide scope to the enumerators and prevent their names from polluting the surrounding namespace. Enum classes are created using the enum class syntax.
#include <iostream>
// Enum class with explicit underlying type and values
enum class Month : int {
JANUARY = 1,
FEBRUARY,
MARCH,
// ...
};
int main() {
// Declare a variable of type "Month"
Month currentMonth = Month::FEBRUARY;
// Use the enum values
if (currentMonth == Month::JANUARY) {
std::cout << "It's January." << std::endl;
} else {
std::cout << "It's not January." << std::endl;
}
return 0;
}
In this example, the Month enum class is used to represent months, and the enumerators are scoped under the Month namespace.
Enumerations are helpful for making code more readable and self-documenting, especially when dealing with sets of related constants. They provide a way to give meaningful names to numeric values, making the code more maintainable and less error-prone.