将对象初始化为C ++类的静态成员的正确方法是什么

时间:2018-07-03 14:01:48

标签: c++

我有一个类似下面的日期类,在添加/减去几天后,我会用它来查找结果日期。 构造函数将验证输入日期,并在无效时引发异常。

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
};

除上述内容外,我还想跟踪今天的日期,这是该类本身的一部分,程序的其他部分可用于计算目的。

是否可以在上面的注释行中编写静态成员,并让类本身初始化对象?

如果是,我们如何初始化对象? 如果不是,那么处理“今天”对象的正确方法是什么?

我阅读了其他文章,但所有文章似乎都涉及基本类型的静态成员。 但是,这里必须执行多个语句才能获取系统日期,因此我认为它与其他文章有所不同。

1 个答案:

答案 0 :(得分:1)

您完全可以取消注释代码,完全与编写的一样。但这仅仅是“声明”变量。要对其进行“定义”,请在顶部(且在所有函数之外)的正好一个源文件(例如带有其余代码的.cpp / .cc文件)中,放在下面: / p>

date date::today;

定义变量(就像定义其他类成员一样)。

请注意,由于它是date,因此只有private个方法可以访问它。如果您希望程序的其他部分(仅)能够读取它,则可以执行以下两项操作之一:

  1. 向该类添加public static方法:

    static const date &Today() { return today; }
    
  2. 在类中添加第二个public static变量,该变量引用第一个变量-但随后您必须担心这两个名称。

    • 在类中,将today更改为_today,然后添加:

      public:
         static const date &today;
      
    • .cpp / .cc中,您需要定义它们:

      date date::_today;
      const date &date::today = date::_today;
      

这样,您可以在date类内修改_today,而程序的其他部分可以读取today