日期類的實現

2021-07-26 04:34:35 字數 2592 閱讀 3202

在學習c++類的時候,日期類是最基礎也是最重要的乙個類。簡單的日期類並不複雜,但在實現的過程中主要會涉及一些c++的基本成員函式。這個**的難度主要在於如何判斷日期類的合法性,比如月份如果大於12,天數也要合法,比如二月不能閏年不能超過30天,平年28天。在自增和自減的時候,也要考慮到年份、月份和天數的變化。

下面給出類的定義:

class

date

int getmonthday(int

year, int

month)

;int

day = days[month];

if ((month == 2) && (isleapyear(year)))

return day;

}private:

int _year;

int _month;

int _day;

};

在寫這個**的過程中,有兩個地方是我考慮得比較多的地方。在考慮到自增的問題時,date& operator++()和date operator+(int day)有相似的地方,在寫**的時候,我是先寫的++。**如下:

date& date::operator++()

else

if (_day == days)

else

}else

return *this;

}

在寫到date operator+(int day)時,我是直接在日期類直接加上來的。比如,今天是2023年1月16日,在加上30天,也就是2023年1月46日,當然46日是不符合日期合法性的。1月一共31天,那麼用46-31天,即2023年2月15日,15日符合2月的日期合法性,即是所求的日期。**實現如下:

date

date::operator +(int

day)

tmp._day += day;

while (tmp._day>getmonthday(tmp._year,tmp._month))

}return tmp;

}

然而寫完後我發現,++可以通過+1來實現也就是說:

date& date::operator++()

加法和減法是一樣的,這裡就不贅餘了。有興趣的同學,可以按照步驟去實現一下。下面給出所有的功能**:

ostream& operator <<(ostream& _cout, const

date& date)

istream& operator >>(istream& _cin, date& date)

date::date(int

year, int

month, int

day)

else

}date::date(const

date& date)

:_year(date._year)

, _month(date._month)

, _day(date._day)

{}date& date::operator=(const

date& date)

return *this;

}date& date::operator++()

date

date::operator++(int)

date

date::operator +(int

day)

tmp._day += day;

while (tmp._day>getmonthday(tmp._year,tmp._month))

}return tmp;

}date

date::operator-(int

day)

else

tmp._day += getmonthday(tmp._year, tmp._month);

}return tmp;

}date& date::operator--()

date

date::operator--(int)

bool date::operator>(const

date& date)

bool date::operator<(const

date& date)

bool date::operator==(const

date& date)

bool date::operator!=(const

date& date)

bool date::operator>=(const

date& date)

bool date::operator<=(const

date& date)

void test()  

int main()

整個日期類的**實現就這麼多,在寫**的過程中還是難免會遇到一些奇奇怪怪的問題,比如在寫最後幾個函式時,函式邏輯沒一點問題,但是測試函式寫得有問題,所以整個程式也就有點問題。總而言之,在寫**的時候要多考慮一些,把能簡化的地方盡量簡化。

日期類的實現

includeusing namespace std class date 拷貝構造 s2 s1 s2 this,s1 d date const date d 賦值運算子的過載 d1 d2 d1 this,d2 d date operator const date d return this 析構,...

日期類的實現

標頭檔案 include include using namespace std class date if month 2 year 4 0 year 100 0 year 400 0 p只有當是閏年的2月才返回29天 else return monthdays month date int ye...

日期類的實現

class date int day days month if month 2 year 4 0 year 100 0 year 400 0 return day 全預設的建構函式 date int year 1900 int month 1,int day 1 year year month m...