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 a
std::array所指出的,这是一个更轻的选择


然后,您可以使用
oss获取一周中的当前日期。您可能希望使用
std::vector
来存储所有周日的字符串。
std::vector weekOfDay={“星期一”,等等

或者更好,正如@celtschk a
std::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
。你说得对,在这种情况下,引用是没有意义的。