第一:我知道如何编写程序,因此我不寻求帮助。但是,我正在粘贴问题的拷贝,以便您可以看到分配的含义。我的问题专门针对您在哪里放置变量以防止使所有内容全局化?

作业

设计一个名为Date的类,该类具有整数数据成员以存储月,日和年。该类应具有一个三参数的默认构造函数,该构造函数允许在创建新的Date对象时设置日期。如果用户创建的Date对象没有传递任何参数,或者传递的任何值无效,则应使用默认值1、1、2001(即2001年1月1日)。该类应具有成员函数,以以下格式打印日期:

3/15/10
March 15, 2010
15 March 2010

问题

1)老师指示我们避免在代码中使用魔数(Magic Number),因此第一个问题是关于我对默认构造函数的实现:
// These are outside the class.
#define DEFAULT_MONTH 1
#define DEFAULT_DAY   1
#define DEFAULT_YEAR  2001

// This is inside the class definition.
Date(int month = DEFAULT_MONTH, int day = DEFAULT_DAY, int year = DEFAULT_YEAR);

这样对吗?

2)该类需要访问包含月名称的string对象数组,因此我可以将其用于显示月名称而不是月号的日期输出。我为数字月份使用了enum(将用于switch)。
const enum MONTH_IDS { JANUARY = 1, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY,
    AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER };

const string MONTH_NAMES[NUM_MONTHS] = { "January", "February", "March",
    "April", "May", "June", "July", "August", "September", "October",
    "November", "December" };

这部分的问题是,您将它们放在哪里?

有些事情我做不到...
我还不能使用静态类成员,因为下一章将对此进行介绍。我们也没有遍历指针,但是我们可以使用引用。

谢谢你的帮助!

我想请教官,但他不在城里,所以明天要交作业。

最佳答案

1)定义是丑陋的。 static const int成员是我要做的,但是你不能...枚举怎么样?

struct Date {
    enum Constants {
        DEFAULT_YEAR = 2001,
        DEFAULT_MONTH = 1,
        DEFAULT_DAY = 1,
    };


    Date(int month = DEFAULT_MONTH, int day = DEFAULT_DAY, int year = DEFAULT_YEAR);

};

2)静态成员数组正是您所需要的。但是由于您不能...也许是静态局部变量:
struct Date {
    std::string MonthToString(enum MONTH_IDS m) {
        static const char *monthNames[] = {
            "January", "February", "March", "April", "May", "June",
            "July", "August", "September", "October", "November", "December" };
        if(m >= sizeof(monthNames)/sizeof(monthNames[0]))
            return std::string("Unknown");
        return std::string(monthNames[m]);
    }
};

关于c++ - 我应该在哪里放置类(class)需要的常量,以保持全局空间的自由?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7921025/

10-11 23:09
查看更多