使用 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";
这两种方法都不是最好的方法,它们各有优缺点。
我想将 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";
这两种方法都不是最好的方法,它们各有优缺点。