Enums are useful for tracking the current state of a small process.

Enum State Machine

enum_state_machine.cpp
#include <iostream>
#include <string>

enum class DoorState {
    Closed,
    Open,
    Locked
};

std::string name(DoorState state) {
    if (state == DoorState::Closed) {
        return "closed";
    }
    if (state == DoorState::Open) {
        return "open";
    }
    return "locked";
}

DoorState toggle(DoorState state) {
    if (state == DoorState::Closed) {
        return DoorState::Open;
    }
    if (state == DoorState::Open) {
        return DoorState::Closed;
    }
    return DoorState::Locked;
}

int main() {
    DoorState state = ;

    std::cout << "before=" << name(state) << std::endl;
    state = toggle(state);
    std::cout << "after=" << name(state) << std::endl;
    return 0;
}
#include <iostream>
#include <string>

enum class DoorState {
    Closed,
    Open,
    Locked
};

std::string name(DoorState state) {
    if (state == DoorState::Closed) {
        return "closed";
    }
    if (state == DoorState::Open) {
        return "open";
    }
    return "locked";
}

DoorState toggle(DoorState state) {
    if (state == DoorState::Closed) {
        return DoorState::Open;
    }
    if (state == DoorState::Open) {
        return DoorState::Closed;
    }
    return DoorState::Locked;
}

int main() {
    DoorState state = ;

    std::cout << "before=" << name(state) << std::endl;
    state = toggle(state);
    std::cout << "after=" << name(state) << std::endl;
    return 0;
}
#include <iostream>
#include <string>

enum class DoorState {
    Closed,
    Open,
    Locked
};

std::string name(DoorState state) {
    if (state == DoorState::Closed) {
        return "closed";
    }
    if (state == DoorState::Open) {
        return "open";
    }
    return "locked";
}

DoorState toggle(DoorState state) {
    if (state == DoorState::Closed) {
        return DoorState::Open;
    }
    if (state == DoorState::Open) {
        return DoorState::Closed;
    }
    return DoorState::Locked;
}

int main() {
    DoorState state = ;

    std::cout << "before=" << name(state) << std::endl;
    state = toggle(state);
    std::cout << "after=" << name(state) << std::endl;
    return 0;
}
state machine A state machine stores the current state and updates it according to a rule.