使用 Enum 表示天数

Using Enum to represent days

我想将 Weekday(星期一到星期五)表示为枚举,但不确定如何在 C++ 中表示数据。我读了一些书,并有了我的枚举 class:

enum Day{MONDAY=0, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY};

但我还需要某种 to_string 方法以便在需要时打印出日期。

目前我在自己单独的 class 中表示 Weekday,如下所示:

Weekday::Weekday(char day){
    switch(day){
        case 'M' :
            weekday = "Monday";
            day_value = 0;
            break;
        case 'T':
            weekday = "Tuesday";
            day_value = 1;
            break;
        case 'W':
            weekday = "Wednesday";
            day_value = 2;
            break;
        case 'R':
            weekday = "Thursday";
            day_value = 3;
            break;
        case 'F':
            weekday = "Friday";
            day_value = 4;
    }

}

但是当我向其他人展示我的代码时,我看到了一些人,所以我想知道这是否真的是最好的方法。

有人建议只使用 switch 来比较日期,完全避免创建新的 class,但我认为这样更有条理,而且如果我需要在工作日中添加更多功能的话,这是有利的都已经设置好了。

我确实已经有很多 classes 在我的程序中表示时间所以也许我对 classes 有点疯狂所以我想我只需要一些指导.

他们不使用 classes 的原因与内存和效率有关,因此我有三个问题:

1.) 工作日的全新 class 是表示此数据的最佳方式吗?

2.)如果某种 class 是最好的方式,那么枚举呢?

3.) 使用枚举,我如何将枚举数据表示为可读字符串以便稍后打印到输出?

抱歉,要拆开很多东西,但我忍不住想知道我制作 class 的方法是否真的是最好的方法,如果有最好的方法的话。

无论如何,提前感谢您的帮助!

编辑:这里的最终目标是比较工作日,例如星期一在星期二之前,所以我为工作日分配了一个值,我不想使用任何导入

我通常使用 table 个结构:

struct Enum_Entry
{
    enum Weekday day;
    const char   day_name[];
    // or const char * day_name;
};

然后我有一个转换table:

Enum_Entry conversion_table[] =
{
  {MONDAY, "Monday"},
   //...
  {FRIDAY, "Friday"},
};

上述 table 的一个好处是条目可以按任何顺序排列。

一种不易维护的方法是使用名称数组:

static const char weekday_names[] = 
{ "Monday", /*...*/, "Friday"};

转换方法:

std::cout << weekday_names[WEDNESDAY] << "\n";

这两种方法都不是最好的方法,它们各有优缺点。