在學習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...