C++类的学习2

定义一个年月日时分秒的类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函数(如秒进位写个函数,分进位再写…)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值