首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

钱能C++(第二版)的练习,请大家来检查一下小弟我的答案

2012-03-06 
钱能C++(第二版)的练习,请大家来检查一下我的答案题目如下:定义一个满足如下要求的Date类:1.用日/月/年的

钱能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;}

热点排行