我有一个类似下面的日期类,在添加/减去几天后,我会用它来查找结果日期。 构造函数将验证输入日期,并在无效时引发异常。
class date
{
private:
int day;
int month;
int year;
bool isValid(date& d);
public:
date(); //default to starting of say Gregorian calendar
date(string strDate); // takes DD/MM/YYYY format string to initialize day, month and year
//static date today;
int operator- (date& d); //difference of two dates in no. of days
int operator- (int days); //get the date a few days before this date
void operator+ (int days); //get the date a few days after this date
};
除上述内容外,我还想跟踪今天的日期,这是该类本身的一部分,程序的其他部分可用于计算目的。
是否可以在上面的注释行中编写静态成员,并让类本身初始化对象?
如果是,我们如何初始化对象? 如果不是,那么处理“今天”对象的正确方法是什么?
我阅读了其他文章,但所有文章似乎都涉及基本类型的静态成员。 但是,这里必须执行多个语句才能获取系统日期,因此我认为它与其他文章有所不同。
答案 0 :(得分:1)
您完全可以取消注释代码,完全与编写的一样。但这仅仅是“声明”变量。要对其进行“定义”,请在顶部(且在所有函数之外)的正好一个源文件(例如带有其余代码的.cpp
/ .cc
文件)中,放在下面: / p>
date date::today;
定义变量(就像定义其他类成员一样)。
请注意,由于它是date
,因此只有private
个方法可以访问它。如果您希望程序的其他部分(仅)能够读取它,则可以执行以下两项操作之一:
向该类添加public static
方法:
static const date &Today() { return today; }
在类中添加第二个public static
变量,该变量引用第一个变量-但随后您必须担心这两个名称。
在类中,将today
更改为_today
,然后添加:
public:
static const date &today;
在.cpp
/ .cc
中,您需要定义它们:
date date::_today;
const date &date::today = date::_today;
这样,您可以在date
类内修改_today
,而程序的其他部分可以读取today
。