C++ 我如何超载<&书信电报;输出枚举的字符串值的步骤
实施代表一周中某一天的上课日。重载运算符+=、运算符-=、运算符++(前缀)和运算符--(前缀)以及运算符您可能希望使用一个C++ 我如何超载<&书信电报;输出枚举的字符串值的步骤,c++,enums,C++,Enums,实施代表一周中某一天的上课日。重载运算符+=、运算符-=、运算符++(前缀)和运算符--(前缀)以及运算符您可能希望使用一个std::vector来存储所有星期的字符串。 std::vector weekOfDay={“星期一”,等等 或者更好,正如@celtschk astd::array所指出的,这是一个更轻的选择 然后,您可以使用oss获取一周中的当前日期。您可能希望使用std::vector来存储所有周日的字符串。 std::vector weekOfDay={“星期一”,等等 或者更好
std::vector
来存储所有星期的字符串。
std::vector weekOfDay={“星期一”,等等代码>
或者更好,正如@celtschk astd::array所指出的,这是一个更轻的选择
然后,您可以使用oss获取一周中的当前日期。您可能希望使用std::vector
来存储所有周日的字符串。
std::vector weekOfDay={“星期一”,等等代码>
或者更好,正如@celtschk astd::array所指出的,这是一个更轻的选择
然后,您可以使用oss获取一周中的当前日期,您可以重载enum
。您不需要创建一个全新的类,只需为enum
创建重载并随时调用它们;请参见main
函数中的用法。使用C++ 11与EnUM类< /代码>实现如下,我测试了它,它工作:
#include <iostream>
using namespace std;
enum class Day
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
Day& operator++(Day& day)
{
int i = static_cast<int>(day) + 1;
// Handle wrap around.
if(i > 6) // Saturday = 6
i = 0; // Sunday = 0
day = static_cast<Day>(i);
return day;
}
ostream& operator<<(ostream& os, const Day day)
{
switch(day)
{
case Day::Sunday: return os << "Sunday";
case Day::Monday: return os << "Monday";
case Day::Tuesday: return os << "Tuesday";
case Day::Wednesday: return os << "Wednesday";
case Day::Thursday: return os << "Thursday";
case Day::Friday: return os << "Friday";
case Day::Saturday: return os << "Saturday";
}
return os;
}
int main()
{
Day day = Day::Monday;
cout << day << endl;
++day;
cout << day << endl;
return 0;
}
#包括
使用名称空间std;
枚举上课日
{
星期天,
星期一,
星期二,
星期三,
星期四,
星期五,
星期六
};
日和操作员++(日和日)
{
int i=静态(天)+1;
//把手卷起来。
如果(i>6)//星期六=6
i=0;//星期日=0
天=静态(i);
回归日;
}
ostream&operator您可以重载enum
。您不需要创建一个全新的类,只需为enum
创建重载并随时调用它们;请参见main
函数中的用法。使用C++ 11与EnUM类< /代码>实现如下,我测试了它,它工作:
#include <iostream>
using namespace std;
enum class Day
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
Day& operator++(Day& day)
{
int i = static_cast<int>(day) + 1;
// Handle wrap around.
if(i > 6) // Saturday = 6
i = 0; // Sunday = 0
day = static_cast<Day>(i);
return day;
}
ostream& operator<<(ostream& os, const Day day)
{
switch(day)
{
case Day::Sunday: return os << "Sunday";
case Day::Monday: return os << "Monday";
case Day::Tuesday: return os << "Tuesday";
case Day::Wednesday: return os << "Wednesday";
case Day::Thursday: return os << "Thursday";
case Day::Friday: return os << "Friday";
case Day::Saturday: return os << "Saturday";
}
return os;
}
int main()
{
Day day = Day::Monday;
cout << day << endl;
++day;
cout << day << endl;
return 0;
}
#包括
使用名称空间std;
枚举上课日
{
星期天,
星期一,
星期二,
星期三,
星期四,
星期五,
星期六
};
日和操作员++(日和日)
{
int i=静态(天)+1;
//把手卷起来。
如果(i>6)//星期六=6
i=0;//星期日=0
天=静态(i);
回归日;
}
ostream&operator因为它是一个不变的数组,所以我看不到使用向量有什么价值。内置数组(或C++11中的std::array
)IMHO是这里的最佳选择。谢谢!我甚至没有想到std::array
,我想在这种情况下使用std::vector
是我的一个坏习惯。Answer edited@celtschk因为它是一个永远不会改变的常量数组,所以我在使用向量时看不到任何值。内置数组(或C++11中的std::array
)IMHO是这里的最佳选择。谢谢!我甚至没有想到std::array
,我想在这种情况下使用std::vector
是我的一个坏习惯。答案@celtschk在构造函数和getDummy
签名中使用int
而不是Day::Dia
有更深层次的原因吗?对我来说,这似乎是一个很弱的抽象概念。对我来说,增加两天似乎是错误的。星期一加星期二是几号operator+=
IMHO应该将int
作为参数,而不是Day
。还要注意的是,您肯定应该在那里添加一些模运算,因为按原样,有时会得到无效的dummyDay值。在构造函数和getDummy
签名中使用int
而不是Day::Dia
是否有更深层次的原因?对我来说,这似乎是一个很弱的抽象概念。对我来说,增加两天似乎是错误的。星期一加星期二是几号operator+=
IMHO应该将int
作为参数,而不是Day
。另外请注意,您肯定应该在那里添加一些模运算,因为按原样,有时会得到无效的dummyDay值。对于枚举,const Day&
没有任何意义。只需按值传递。我把代码从const Day&Day
改为const Day
。没错,在这种情况下引用没有意义。对于枚举,const Day&
没有意义。只需按值传递。我把代码从const Day&Day
改为const Day
。你说得对,在这种情况下,引用是没有意义的。