钱能C++(第二版)的练习,请大家来检查一下我的答案
题目如下:
定义一个满足如下要求的Date类:
1.用日/月/年的格式输出日期;
2.可运行在日期上加一天的操作;
3.设置日期操作.
我的答案如下:
#include <iostream>
#include <iomanip>
using namespace std;
class Date
{
int year,month,day
public:
Date(int y,int m,int d):year(y),month(m),day(d){}
void friend addDate();
void print();
bool Isleapyear();
~Date(){delete[] year;
delete[] month;
delete[] day;}
};
friend void Date::addDate()
{switch(month)
{case 1:{if(++day> 31)
{++month;
day=1;}
break;}
case 2:{while(Isleapyear())
{if(++day> 29)
{++month;
day=1;}
break;
}
if(++day> 28)
{++month;
day=1;}
break;
}
case 3:{if(++day> 31)
{++month;
day=1;}
break;}
case 4:{if(++day> 30)
{++month;
day=1;}
break;}
case 5:{if(++day> 31)
{++month;
day=1;}
break;}
case 6:{if(++day> 30)
{++month;
day=1;}
break;}
case 7:{if(++day> 31)
{++month;
day=1;}
break;}
case 8:{if(++day> 31)
{++month;
day=1;}
break;}
case 9:{if(++day> 30)
{++month;
day=1;}
break;}
case 10:{if(++day> 31)
{++month;
day=1;}
break;}
case 11:{if(++day> 30)
{++month;
day=1;}
break;}
case 12:{if(++day> 31)
{++year;
++month;
day=1;}
break;}
}
}
void Date::print()
{
cout.setfill( '0 ');
cout < < "日期为: " < <day < < '- ' < <month < < '- ' < <year < < '- ' < <endl;
}
bool Date::Isleapyear()
{return (0==year%4&&year%100!=0)||(0==year%400);}
上面就是我的实现代码,是不是有些繁琐呢,请大家帮我检查一下有没有什么问题.请多指教!!谢谢了
[解决办法]
~Date(){delete[] year;
delete[] month;
delete[] day;}
这个肯定会出错的。year、month、day都是int,对一个int不能使用delete[]
[解决办法]
有点无聊,按你原来的改了下,欢迎大家批评^_^
#include <iostream>
#include <iomanip>
using namespace std;
class Date
{
int year;
int month;
int day;
void dayUp()
{
++day;
}
void monthUp()
{
++month;
day = 1;
}
void yearUp()
{
++year;
month = 1;
day = 1;
}
void up(int bounds[12])
{
assert( 1 <=month && month <=12 );
if( day < bounds[month-1] )
{
dayUp();
}
else if(month < 12)
{
monthUp();
}
else
{
yearUp();
}
}
public:
Date(int y, int m, int d): year(y), month(m), day(d){}
void AddDate();
void Print() const;
bool IsLeapYear() const;
};
void Date::AddDate()
{
int c[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int d[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return up( IsLeapYear() ? c : d);
}
void Date::Print() const
{
cout < <setfill( '0 ');
cout < < "日期为: " < <day < < '- ' < <month < < '- ' < <year < <endl;
}
bool Date::IsLeapYear() const
{
return (0 == year%4 && year%100 != 0) || 0 == year%400;
}
int main()
{
Date d(0, 1, 1);
for(int i = 0; i < 365*2000 + 2000/4 - 2000/100 + 2000/400; ++i)
{
d.AddDate();
}
d.Print();
}
[解决办法]
只是修改了你的错误之处。
case 12:{if(++day> 31)
{++year;
month=1;
day=1;}