定义日期类(Date),实现对下面运算符的重载:
答案:3 悬赏:0 手机版
解决时间 2021-04-28 20:03
- 提问者网友:焚苦与心
- 2021-04-28 00:27
定义日期类(Date),实现对下面运算符的重载:
最佳答案
- 五星知识达人网友:野味小生
- 2021-04-28 01:22
// 我写了一个,测试过了,没问题。
// 加上一个整数的部分比较难
#include
int idebug=0;
#define DEVAL(a) cout<<#a<<":"<#define DEBUG cout<<"-------------------------("<<++idebug<<")-------------------------"<
// 调试开关
#define DEBUG_SWITCH 0
class Date
{
public:
int operator-(Date& dRight); // 减法
Date operator+(int iRight); // 右加一个整数
friend Date operator+(int iLeft,Date& dRight); // 左加一个整数
Date(int y, int m, int d);
Date(Date& dRsc);
Date();
bool isLeapYear(); // 判断是否闰年
int howNumber(); // 计算该天是该年的第几天
void show(); // 显示
friend ostream& operator<<(ostream& os,Date& dRight); // 流输出
private:
int _year;
int _month;
int _day;
};
bool isleapyear(int iyear)
{ // 判定阳历闰年遵循的一般规律为:四年一闰,百年不闰; 四百年再闰.
return (iyear%4==0 && iyear%100!=0 || iyear % 400 == 0 );
}
bool Date::isLeapYear()
{
return isleapyear(_year);
}
int Date::howNumber()
{
// 先按平年计算
int days[12] = {
31,28,31,30,31,30,
31,31,30,31,30,31,
},dayCount(0);
for ( int i=0; i< _month - 1; ++i )
{
dayCount += days[i];
}
if (isLeapYear() && _month > 2 )
{ // 若是闰年,且过了2月,再加一天
++dayCount;
}
return dayCount + _day;
}
int Date::operator-( Date& dRight )
{
int ires(0);
for (int i=dRight._year; i<_year; ++i)
{
ires += ( 365 + isleapyear(i) );
}
return ires + howNumber() - dRight.howNumber();
}
Date Date::operator+( int iRight )
{
Date dRes(*this);
int monDays[12] = {
31,28,31,30,31,30,
31,31,30,31,30,31,
};
// 按年处理
while ( iRight>365 ) {
if ( _month<2 )
{
iRight -= ( 365 + isleapyear(dRes._year) );
}
else
{
iRight -= ( 365 + isleapyear(dRes._year+1) );
}
dRes._year++;
}
#if DEBUG_SWITCH
dRes.show();
DEVAL(iRight)< DEBUG;
#endif
// 不足一年的
while ( iRight>0 )
{
dRes._day++;
--iRight;
if ( dRes._day > monDays[dRes._month-1] )
{
#if DEBUG_SWITCH
DEVAL(monDays[dRes._month-1]);
DEVAL(iRight);
#endif
dRes._day -= monDays[dRes._month-1];
++dRes._month;
if ( dRes._month > 12 )
{
dRes._month -= 12; // 12 + 1 -> 1
dRes._year++;
if ( isleapyear(dRes._year) )
{ // 闰年二月29天
monDays[1] = 29;
}
else
{ // 平年二月28天
monDays[1]=28;
}
}
#if DEBUG_SWITCH
dRes.show();
cout< #endif
}
}
return dRes;
}
Date::Date( int y, int m, int d ) :
_year(y), _month(m), _day(d)
{
}
Date::Date( Date& dRsc ) :
_year(dRsc._year),_month(dRsc._month),_day(dRsc._day)
{
}
Date::Date()
{
Date(0,0,0);
}
void Date::show()
{
cout<<_year<<"/"<<_month<<"/"<<_day< #if DEBUG_SWITCH
DEVAL(isLeapYear());
DEVAL(howNumber());
#endif
cout< }
Date operator+(int iLeft,Date& dRight)
{
return dRight.operator+(iLeft);
}
ostream& operator<<(ostream& os,Date& dRight)
{
os< return os;
}
int main()
{
Date d1(2011,12,31),d2(2011,1,1);
Date dx;
// d1.show();
// d2.show();
DEVAL(d1);
DEVAL(d2);
int deta=d1-d2;
cout<<"The result of ( d1 - d2 ) is:"< cout<
int iStart(0),iCount(0);
cout<<"请输入开始测试的加数iStart:"< cin>>iStart;
DEVAL(iStart);
cout<<"请输入测试数目iCount:"< cin>>iCount;
DEVAL(iCount);
cout<<"测试结果如下:"< for (int i=iStart; i < iStart+iCount; ++i)
{
dx=d1+i;
DEVAL(i);
cout<<"The result of ( d1 + i ):"< dx.show();
}
return 0;
}
// 加上一个整数的部分比较难
#include
int idebug=0;
#define DEVAL(a) cout<<#a<<":"<#define DEBUG cout<<"-------------------------("<<++idebug<<")-------------------------"<
// 调试开关
#define DEBUG_SWITCH 0
class Date
{
public:
int operator-(Date& dRight); // 减法
Date operator+(int iRight); // 右加一个整数
friend Date operator+(int iLeft,Date& dRight); // 左加一个整数
Date(int y, int m, int d);
Date(Date& dRsc);
Date();
bool isLeapYear(); // 判断是否闰年
int howNumber(); // 计算该天是该年的第几天
void show(); // 显示
friend ostream& operator<<(ostream& os,Date& dRight); // 流输出
private:
int _year;
int _month;
int _day;
};
bool isleapyear(int iyear)
{ // 判定阳历闰年遵循的一般规律为:四年一闰,百年不闰; 四百年再闰.
return (iyear%4==0 && iyear%100!=0 || iyear % 400 == 0 );
}
bool Date::isLeapYear()
{
return isleapyear(_year);
}
int Date::howNumber()
{
// 先按平年计算
int days[12] = {
31,28,31,30,31,30,
31,31,30,31,30,31,
},dayCount(0);
for ( int i=0; i< _month - 1; ++i )
{
dayCount += days[i];
}
if (isLeapYear() && _month > 2 )
{ // 若是闰年,且过了2月,再加一天
++dayCount;
}
return dayCount + _day;
}
int Date::operator-( Date& dRight )
{
int ires(0);
for (int i=dRight._year; i<_year; ++i)
{
ires += ( 365 + isleapyear(i) );
}
return ires + howNumber() - dRight.howNumber();
}
Date Date::operator+( int iRight )
{
Date dRes(*this);
int monDays[12] = {
31,28,31,30,31,30,
31,31,30,31,30,31,
};
// 按年处理
while ( iRight>365 ) {
if ( _month<2 )
{
iRight -= ( 365 + isleapyear(dRes._year) );
}
else
{
iRight -= ( 365 + isleapyear(dRes._year+1) );
}
dRes._year++;
}
#if DEBUG_SWITCH
dRes.show();
DEVAL(iRight)<
#endif
// 不足一年的
while ( iRight>0 )
{
dRes._day++;
--iRight;
if ( dRes._day > monDays[dRes._month-1] )
{
#if DEBUG_SWITCH
DEVAL(monDays[dRes._month-1]);
DEVAL(iRight);
#endif
dRes._day -= monDays[dRes._month-1];
++dRes._month;
if ( dRes._month > 12 )
{
dRes._month -= 12; // 12 + 1 -> 1
dRes._year++;
if ( isleapyear(dRes._year) )
{ // 闰年二月29天
monDays[1] = 29;
}
else
{ // 平年二月28天
monDays[1]=28;
}
}
#if DEBUG_SWITCH
dRes.show();
cout<
}
}
return dRes;
}
Date::Date( int y, int m, int d ) :
_year(y), _month(m), _day(d)
{
}
Date::Date( Date& dRsc ) :
_year(dRsc._year),_month(dRsc._month),_day(dRsc._day)
{
}
Date::Date()
{
Date(0,0,0);
}
void Date::show()
{
cout<<_year<<"/"<<_month<<"/"<<_day<
DEVAL(isLeapYear());
DEVAL(howNumber());
#endif
cout<
Date operator+(int iLeft,Date& dRight)
{
return dRight.operator+(iLeft);
}
ostream& operator<<(ostream& os,Date& dRight)
{
os<
}
int main()
{
Date d1(2011,12,31),d2(2011,1,1);
Date dx;
// d1.show();
// d2.show();
DEVAL(d1);
DEVAL(d2);
int deta=d1-d2;
cout<<"The result of ( d1 - d2 ) is:"<
int iStart(0),iCount(0);
cout<<"请输入开始测试的加数iStart:"<
DEVAL(iStart);
cout<<"请输入测试数目iCount:"<
DEVAL(iCount);
cout<<"测试结果如下:"<
{
dx=d1+i;
DEVAL(i);
cout<<"The result of ( d1 + i ):"<
}
return 0;
}
全部回答
- 1楼网友:狂恋
- 2021-04-28 03:13
你这个问题看着要求不多,但是要写代码会很多。
因为日期如果是真正的日期,还要比较是不是闰年什么的,对年、月、日进行操作
所以分少别人不会帮你的。
如果日期只是一个数字,那就简单多了
因为日期如果是真正的日期,还要比较是不是闰年什么的,对年、月、日进行操作
所以分少别人不会帮你的。
如果日期只是一个数字,那就简单多了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯