悲剧了 求改错.......
程序代码:
/******************************************************************************************* 2. 自定义一个简单的日期类DateType,它具有数据成员y、m、d,用来表示当前日期的年、月、日。 而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。 例如,下面给出的"雏形"可用来实现对天的增加,比较两个日期是否相等,以及对日期的输出等操作。 请完成各类成员函数,并编制主函数,说明DateType类对象,对定义的各成员函数进行调用, 以验证它们的正确性。 class DateType { //自定义的日期类DateType int y,m,d; //数据成员,表示当前日期的年、月、日 public: DateType(int y0=1, int m0=1, int d0=1); //构造函数,设定年、月、日;并设置参数默认值 void incrementDay(); //增加1天 bool equal(DateType dt2); //判断二日期是否相等 void printDate(); //屏幕输出日期对象的有关数据(年、月、日) }; 注意,当对日期增加1天后,也会涉及所谓的"进位"问题:首先算出本"日"所在的月份具有的天数N, 若加1之后的"日"数值超过所在的月份具有的天数N时,"进位"到月,而月份若超过12时还要"进位"到年。 ***********************************************************************************************/ #include<iostream> using namespace std; class DateType { int y; int m; int d; //数据成员,表示当前日期的年、月、日 public: DateType(int y0=1, int m0=1, int d0=1); //构造函数,设定年、月、日;并设置参数默认值 void incrementDay(); //增加1天 bool equal(DateType dt2); //判断二日期是否相等 void printDate(); //屏幕输出日期对象的有关数据(年、月、日) }; DateType::DateType(int y0, int m0, int d0) { y=y0; m=m0; d=d0; } void DateType::incrementDay() { int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if((y%4==0&&y%100!=0)||(y%400==0)) a[1]++; if(d==a[m-1]&&m==12) { y++; m=1; d=1; } else if(d==a[m-1]&&m!=12) { m++; d=1; } else d++; } void DateType::printDate() { cout<<"日期是"<<y<<"年"<<m<<"月"<<d<<"日"<<endl; } bool DateType::equal(DateType dt2) { DateType dt; if(dt.y==dt2.y||dt.m==dt2.m||dt.d==dt2.d) return true; else return false; } void main() { DateType dt1(1999,2,28),dt2(1999,2,28); cout<<"dt1"; dt1.printDate(); cout<<"dt2"; dt2.printDate(); if(dt1.equal(dt2)) cout<<"两日期相等"<<endl; else cout<<"两日期不相等"<<endl; dt2.incrementDay(); cout<<"dt2.incrementDay():dt2"; dt2.printDate(); }
为什么两日期不相等啊?晕......
[ 本帖最后由 爵爷 于 2009-11-19 17:20 编辑 ]