Enumerations and State
Enum With Structs
Structs can store enum values alongside other fields.
enum field
An enum field records a named category inside a larger object.
Enum With Structs
enum_with_structs.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>
enum class Priority {
Low,
Medium,
High
};
struct Ticket {
std::string title;
Priority priority;
};
int points(Priority priority) {
if (priority == Priority::High) {
return 3;
}
if (priority == Priority::Medium) {
return 2;
}
return 1;
}
int main() {
Priority priority = Priority::Medium;
Ticket ticket{"login bug", priority};
std::cout << "title=" << ticket.title << std::endl;
std::cout << "points=" << points(ticket.priority) << std::endl;
return 0;
}
#include <iostream>
#include <string>
enum class Priority {
Low,
Medium,
High
};
struct Ticket {
std::string title;
Priority priority;
};
int points(Priority priority) {
if (priority == Priority::High) {
return 3;
}
if (priority == Priority::Medium) {
return 2;
}
return 1;
}
int main() {
Priority priority = Priority::Low;
Ticket ticket{"login bug", priority};
std::cout << "title=" << ticket.title << std::endl;
std::cout << "points=" << points(ticket.priority) << std::endl;
return 0;
}
#include <iostream>
#include <string>
enum class Priority {
Low,
Medium,
High
};
struct Ticket {
std::string title;
Priority priority;
};
int points(Priority priority) {
if (priority == Priority::High) {
return 3;
}
if (priority == Priority::Medium) {
return 2;
}
return 1;
}
int main() {
Priority priority = Priority::High;
Ticket ticket{"login bug", priority};
std::cout << "title=" << ticket.title << std::endl;
std::cout << "points=" << points(ticket.priority) << std::endl;
return 0;
}
priority ← 1, ticket ← (empty)
25int main() {26 Priority priority→ 1 = Priority::Medium; //@priority=Priority::Low, Priority::High2728 Ticket ticket→ (empty){"login bug", priority1};2930 std::cout << "title=" << ticket(empty).title << std::endl;31 std::cout << "points=" << points(ticket(empty).priority) << std::endl;32 return 0;outputtitle=login bugint points(Priority priority)
15int points(Priority priority1) {16 if (priority == Priority::High) {if (priority == Priority::Medium)
18}19if (priority1 == Priority::Medium) {20 return 2;21}std::cout << "points=" << points(ticket.priority) << std::endl;
30 std::cout << "title=" << ticket.title << std::endl;31 std::cout << "points=" << points(ticket(empty).priority) << std::endl;32 return 0;33}outputpoints=2
priority ← 0, ticket ← (empty)
25int main() {26 Priority priority→ 0 = Priority::Low;2728 Ticket ticket→ (empty){"login bug", priority0};2930 std::cout << "title=" << ticket(empty).title << std::endl;31 std::cout << "points=" << points(ticket(empty).priority) << std::endl;32 return 0;outputtitle=login bugint points(Priority priority)
15int points(Priority priority0) {16 if (priority == Priority::High) {17 return 3;18 }19 if (priority == Priority::Medium) {20 return 2;21 }22 return 1;23}std::cout << "points=" << points(ticket.priority) << std::endl;
30 std::cout << "title=" << ticket.title << std::endl;31 std::cout << "points=" << points(ticket(empty).priority) << std::endl;32 return 0;33}outputpoints=1
priority ← 2, ticket ← (empty)
25int main() {26 Priority priority→ 2 = Priority::High;2728 Ticket ticket→ (empty){"login bug", priority2};2930 std::cout << "title=" << ticket(empty).title << std::endl;31 std::cout << "points=" << points(ticket(empty).priority) << std::endl;32 return 0;outputtitle=login bugint points(Priority priority)
15int points(Priority priority2) {16 if (priority == Priority::High) {if (priority == Priority::High)
15int points(Priority priority) {16 if (priority2 == Priority::High) {17 return 3;18 }std::cout << "points=" << points(ticket.priority) << std::endl;
30 std::cout << "title=" << ticket.title << std::endl;31 std::cout << "points=" << points(ticket(empty).priority) << std::endl;32 return 0;33}outputpoints=3