设计一个日期类Date,,要求: (1)包含年(year)、月(month)和日(day)私有数据成员。 (2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-

原创 2013年12月02日 23:37:26

#include<iostream>

using namespace std;

class Date{

private:

int year,month,day;

public:

Date(int y=1,int m=1 ,int d=1){

year=y;

month=m;

day=d;

}

int GetYear() const {return year;}

int GetMonth() const {return month;}

int GetDay() const {return day;}

Date operator+(int days);

Date operator-(int days);

static bool LeapYear(int y);

static int GetYearDays(int y);

static int GetMonthDays(const Date &d);

static int DateNum(const Date &d);

static Date NumDate(int n);

friend ostream &operator<<(ostream &cout,const Date&d);

friend istream &operator>>(istream &cin,const Date&d);

};

 

Date Date::operator+(int days)

{

int n=DateNum(*this)+days;

return NumDate(n);

}

Date Date::operator-(int days)

{  int n=DateNum(*this)-days;

   return NumDate(n);

}

bool Date::LeapYear(int y)

{

if(y%4==0 && y%100!=0||y%400==0)

return true;

else 

return false;

}

 

int Date::GetYearDays(int y)

{

if(LeapYear(y))

return 366;

else 

return 365;

}

int Date::GetMonthDays(const Date &d)

{

int n;

switch(d.GetMonth())

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

n=31;

break;

case 4:

case 6:

case 9:

case 11:

n=30;

break;

case 2:

if(LeapYear(d.GetYear()))

n=29;

else

n=28;

}

return n;

}

int Date::DateNum(const Date &d)

{

int y,n=0;

for(y=1;y<d.GetYear();y++)

n+=GetYearDays(y);

for(int m=1;m<d.GetMonth();m++)

n+=GetMonthDays(Date(y,m,1));

n+=d.GetDay();

return n;

}

 

Date Date::NumDate(int n)

{

int y,m,d,rest=n;

for(y=1,rest=n;rest>GetYearDays(y);y++)

rest-=GetYearDays(y);

for(m=1;rest>GetMonthDays(Date(y,m,1));m++)

rest-=GetMonthDays(Date(y,m,1));

d=rest;

return Date(y,m,d);

}

 

ostream &operator<<(ostream &out,Date &d)

{

out<<d.GetYear()<<"-"<<d.GetMonth<<"-"<<d.GetDay();

return out;

}

 

istream &operator>>(istream &in,Date &d)

{

int year,month,day;

cin>>year>>month>>day;

d=Date(year,month,day);

return in;

}

 

int main(void)

{

Date d(2013,1,19);

 

cout<<d<<endl;

cout<<"10日后:"<<d+10<<endl;

cout<<"10日前:"<<d-10<<endl;

cin>>d;

cout<<"日期:"<<d<<endl;

return 0;

}

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

设计一个日期类Date,,要求: (1)包含年(year)、月(month)和日(day)私有数据成员。 (2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-

#includeclass Date{ private: double year,month,day; public: Date(double y=0,double m=0,double d=0)...

Python之日期与时间处理模块(date和datetime)

本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java 中Date类型的时间显示格式

本文转至http://www.blogjava.net/sharky/articles/13057.html创建一个日期对象使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子。 这个时...
  • lfk_jery
  • lfk_jery
  • 2010年08月23日 00:04
  • 91816

c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)

c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)...

定义日期类Date,并重载运算符实现几种操作

题目要求这样:定义一日期Date类,重载++,--,-和^ 运算,分别完成求日期+1,-1, 两个日期相减之间天数,以及取对应日期的星期几的操作,并编写主函数进行测试。 代码: Date类 //...

日期类(Date)_运算符重载简单应用

面对日期类里面的加加减减涉及到的进位和借位,我更倾向使用一个保存了每个月天数的数组代替,虽然很占内存,但是方法简化了,而且不需要遍历数组,只需要拿到月份的数字,用月份的数字当下标就可以得到这个月的天数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计一个日期类Date,,要求: (1)包含年(year)、月(month)和日(day)私有数据成员。 (2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-
举报原因:
原因补充:

(最多只允许输入30个字)