C++ 枚举中的整数溢出,仅循环通过命名整数
我如何实现这种行为C++ 枚举中的整数溢出,仅循环通过命名整数,c++,c++11,enums,C++,C++11,Enums,我如何实现这种行为 enum周{ 星期日=0,星期一,星期二,星期三,星期四,星期五,星期六 }; enum week day=星期六;//6. //++day=>0 enum week day=sunday;//0 //--天=>6 您可以使用enum类并为其重载运算符(如@NathanOliver所建议的)。@Thomas Matthews建议的公式可用于避免处理负数: 枚举+运算符实现 week已重命名为day,以避免混淆(一个枚举值不代表整个星期,仅代表一天) 您可以使用enum类并
enum周{
星期日=0,星期一,星期二,星期三,星期四,星期五,星期六
};
enum week day=星期六;//6.
//++day=>0
enum week day=sunday;//0
//--天=>6
您可以使用enum类并为其重载运算符(如@NathanOliver所建议的)。@Thomas Matthews建议的公式可用于避免处理负数:
枚举+运算符实现
week
已重命名为day
,以避免混淆(一个枚举值不代表整个星期,仅代表一天)
您可以使用enum类并为其重载运算符(如@NathanOliver所建议的)。@Thomas Matthews建议的公式可用于避免处理负数: 枚举+运算符实现
week
已重命名为day
,以避免混淆(一个枚举值不代表整个星期,仅代表一天)
您必须将其封装在知道枚举边界值的函数中。使用
枚举类
,并自行定义运算符的行为。我是否可以以某种方式重载++
&-
运算符?@JohnDoe这正是NathanOliver的建议。有关签名,请参阅“外部类定义”此表中的列:当递增超过最后一个枚举时,您期望的行为是什么?您必须将其封装在知道枚举边界值的函数中。使用枚举类
,并自行定义运算符的行为方式。我是否可以以某种方式重载++
和-
运算符?@JohnDoe这就是这正是纳撒诺利弗的建议。有关签名,请参阅表中的“外部类定义”列:当增量超过最后一个枚举时,您希望看到什么行为?
enum class day : unsigned char {
sunday = 0, monday, tuesday, wednesday, thursday, friday, saturday
};
// preincrement
day& operator++(day& d)
{
d = static_cast<day>((static_cast<unsigned char>(d) + 1) % 7);
return d;
}
// postincrement
day operator++(day& d, int)
{
day res = d;
d = static_cast<day>((static_cast<unsigned char>(d) + 1) % 7);
return res;
}
// predecrement
day& operator--(day& d)
{
d = static_cast<day>((static_cast<unsigned char>(d) + 6) % 7);
return d;
}
// postdecrement
day operator--(day& d, int)
{
day res = d;
d = static_cast<day>((static_cast<unsigned char>(d) + 6) % 7);
return res;
}
std::ostream& operator<<(std::ostream& s, day d)
{
switch (d)
{
case day::monday:
s << "Monday";
break;
case day::tuesday:
s << "Tuesday";
break;
case day::wednesday:
s << "Wednesday";
break;
case day::thursday:
s << "Thursday";
break;
case day::friday:
s << "Friday";
break;
case day::saturday:
s << "Saturday";
break;
case day::sunday:
s << "Sunday";
break;
}
return s;
}
int main() {
day d1 = day::sunday;
--d1;
day d2 = day::saturday;
++d2;
day d3 = day::wednesday;
--d3;
day d4 = day::wednesday;
++d4;
std::cout << d1 << '\n'
<< d2 << '\n'
<< d3 << '\n'
<< d4 << '\n';
return 0;
}
Saturday
Sunday
Tuesday
Thursday