65,210
社区成员
发帖
与我相关
我的任务
分享//idate.h
#include<iostream>
using namespace std;
class IDate
{
public:
virtual ~IDate(){}
virtual void print(ostream& o)const=0;
};
IDate& createDate(int y,int m,int d);
inline ostream& operator<<(ostream& o,const IDate& d)
{d.print(o);return o;}//date.h
#include"idate.h"
#include<iostream>
class Date : public IDate
{
int year,month,day;
public:
Date(int y,int m,int d):year(y),month(m),day(d){}
~Date(){}
void print(std::ostream& o)const;
};//date.cpp
#include"stdafx.h"
#include"date.h"
#include<iostream>
#include<iomanip>
using namespace std;
void Date::print(std::ostream& o)const
{
o<<setfill('0')<<setw(4)<<year<<'-'<<setw(2)<<month<<'-'
<<setw(2)<<day<<"\n"<<setfill(' ');
}
IDate& createDate(int y,int m,int d)
{return *new Date(y,m,d);}
//error C2259: 'Date' : cannot instantiate abstract class
//不能实例化抽象类?
//但是我实例化的是抽象类的子类啊
// mian.cpp
#include "stdafx.h"
#include"idate.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
IDate& d=createDate(2009,04,23);
cout<<d<<endl;
delete &d;
return 0;
}
void Data::i2ymd(int absDay){
absDay = absDay>0 && absDay<3650000 ? absDay : 1;
int n = absDay;
for(year=1;n>isLeapYear()+365; n-=isLeapYear()+365,year++);
for(month=1;(month<12&&n>(isLeapYear()&&month>2)+tians[month]);month++);
//我觉得应该是...month<12&&(n>(isLeapYear()&&month>2)+...
day = n - (isLeapYear()&&month>2) - tians[month-1];
}