定义一个年月日时分秒的类datetime,要求先定义两个time,date。再定义datetime,并写一个nexttime函数求下一秒的年月日时分秒。
这个题一开始我就把datetime写出来了,但是怎么也不会把nexttime加进去,于是就先写成了这样:
#include<iostream>
using namespace std;
class time
{
private:
int hour, minute, secend;
public:
friend class datetime;
time(){}
time(int h, int min, int s)
{
hour = h; minute = min; secend = s;
}
void settime()
{
cin >> hour >> minute >> secend;
}
int gettimeh()
{
return hour;
}
int gettimem()
{
return minute;
}
int gettimes()
{
return secend;
}
void showtime()
{
cout << hour << ":" << minute << ":" << secend << " ";
}
~time(){}
};
class date
{
private:
int year, month, day;
public:
friend class datetime;
date(){}
date(int y, int m, int ri)
{
year = y; month = m; day = ri;
}
void setdate()
{
cin >> year >> month >> day;
}
int getdatey()
{
return year;
}
int getdatem()
{
return month;
}
int getdated()
{
return day;
}
void showdate()
{
cout << year << "/" << month << "/" << day << " ";
}
~date() {}
};
class datetime
{
private:
time t; date d;
public:
datetime(){}
datetime(int y, int m, int ri, int h, int min, int s) :d(y, m, ri), t(h, min, s){}
datetime(datetime &dt)
{
t = dt.t; d = dt.d;
}
void setdatetime()
{
cout << "输入年月日时分秒" << endl;
d.setdate(); t.settime();
}
void showdatetime()
{
cout << "输出:\n";
d.showdate();t.showtime();
}
~datetime(){}
int getdatetimes()
{
return t.gettimes();
}
int getdatetimem()
{
return t.gettimem();
}
int getdatetimeh()
{
return t.gettimeh();
}
int getdatetimey()
{
return d.getdatey();
}
int getdatetimeM()
{
return d.getdatem();
}
int getdatetimed()
{
return d.getdated();
}
};
int main()
{
datetime dt1;
int secend,minute,hour,year,month,day;
dt1.setdatetime();
//next函数部分
secend=dt1.getdatetimes();
minute=dt1.getdatetimem();
hour=dt1.getdatetimeh();
day=dt1.getdatetimed();
month=dt1.getdatetimeM();
year=dt1.getdatetimey();
secend++;
if(secend==60)
{
secend=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
day++;
}
}
}
if(month==12)
{
if(day==32)
{day=1;
month=1;
year++;
}
}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==11)
{
if(dt1.getdatetimed()==32)
{day=1;
month++;
}
}
if(dt1.getdatetimeM()==4||dt1.getdatetimeM()==6||dt1.getdatetimeM()==9)
{
if(dt1.getdatetimed()==31)
{day=1;
month++;
}
}
if(month==2)
{
if(year/4==0&&year/100!=0||year/400==0)
{
if(day==30)
{day=1;
month++;
}
}
else
{
if(day==29)
{day=1;
month++;
}
}
}
datetime dt2(year,month,day,hour,minute,secend);//next函数部分结束
dt2.showdatetime();
return 0;
}
很蠢,但我太菜,不过在写的过程中我知道了该如何在main函数中去调用类中私有函数,就是再写个getdatetime函数,还有如何调用其他类里的函数和值(加friend变友元函数)。
但之后我同学告诉我,这个代码的主要思想就是用了变量(main函数中那些int )代替了get()函数,
要把它放到datetime里的话,就加一个新的可以直接赋值的set函数就行。
新的代码:
#include<iostream>
using namespace std;
class time
{
private:
int hour, minute, secend;
public:
friend class datetime;
void Settime(int h,int m,int s)
{
hour=h;minute=m;secend=s;
}
time(){}
time(int h, int min, int s)
{
hour = h; minute = min; secend = s;
}
void settime()
{
cin >> hour >> minute >> secend;
}
int gettimeh()
{
return hour;
}
int gettimem()
{
return minute;
}
int gettimes()
{
return secend;
}
void showtime()
{
cout << hour << ":" << minute << ":" << secend << " ";
}
~time(){}
};
class date
{
private:
int year, month, day;
public:
void Setdate(int ys,int ms,int ds)
{
year=ys;month==ms;day=ds;
}
friend class datetime;
date(){}
date(int y, int m, int ri)
{
year = y; month = m; day = ri;
}
void setdate()
{
cin >> year >> month >> day;
}
int getdatey()
{
return year;
}
int getdatem()
{
return month;
}
int getdated()
{
return day;
}
void showdate()
{
cout << year << "/" << month << "/" << day << " ";
}
~date() {}
};
class datetime
{
private:
time t; date d;
public:
datetime(){}
datetime(int y, int m, int ri, int h, int min, int s) :d(y, m, ri), t(h, min, s){}
datetime(datetime &dt)
{
t = dt.t; d = dt.d;
}
void setdatetime()
{
cout << "输入年月日时分秒" << endl;
d.setdate(); t.settime();
}
void showdatetime()
{
cout << "输出:\n";
d.showdate();t.showtime();
}
~datetime(){}
void Setdatetime(int year,int month,int day,int h,int m,int s)
{
d.Setdate(year,month,day);
t.Settime(h,m,s);
}//就是这个,这样就可以在datetime类的next函数里来用变量,就像普通函数一样。
void nexttime(){
int secend,minute,hour,year,month,day;
secend=t.gettimes();
minute=t.gettimem();
hour=t.gettimeh();
day=d.getdated();
month=d.getdatem();
year=d.getdatey();
secend++;
if(secend==60)
{
secend=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
day++;
}
}
}
if(month==12)
{
if(day==32)
{day=1;
month=1;
year++;
}
}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==11)
{
if(d.getdated()==32)
{day=1;
month++;
}
}
if(d.getdatem()==4||d.getdatem()==6||d.getdatem()==9)
{
if(d.getdated()==31)
{day=1;
month++;
}
}
if(month==2)
{
if(year/4==0&&year/100!=0||year/400==0)
{
if(day==30)
{day=1;
month++;
}
}
else
{
if(day==29)
{day=1;
month++;
}
}
}
Setdatetime (year,month,day,hour,minute,secend);}
};
int main()
{
datetime dt1;
dt1.setdatetime();
dt1.nexttime();
dt1.showdatetime();
return 0;
}
还有其他方法,比如用很多函数来表示next函数(如秒进位写个函数,分进位再写…)