日期时间类(c++)(增加若干秒)

自定义一个日期时间类DateTimeType,它含有类DateType与类TimeType的类对象作为其数据成员,并具有所列的其他几个成员函数。而后编制主函数,说明DateTimeType的类对象,并对其成员函数以及二对象成员所属类的公有成员函数进行使用。

class DateTimeType {  //自定义的日期时间类 DateTimeType

DateType date; //类 DateType 的类对象 date 作为其数据成员

TimeType time; //类 TimeType 的类对象 time 作为其另一个数据成员

public:

DateTimeType(int y0=1, int m0=1, int d0=1, int hr0=0, int mi0=0, int se0=0);

//构造函数,设定 DateTimeType 类对象的日期时间,并为各参数设置了默认值

DateType& GetDate(){ return date; } //返回本类的私有数据对象 data

TimeType& GetTime(){ return time; } //返回本类的私有数据对象 time

void IncrementSecond(int s);  //增加若干秒,注意“进位”问题

void PrintDateTime(); //屏幕输出日期时间对象的有关数据

};

注意,每一个DateTimeType类对象中总包含有一个DateType类对象(对象成员)以及一个TimeType类对象(对象成员),编制与实现本程序时,也必须包含DateType与TimeType自定义类(类型)。

之所以设置了公有的类成员函数GetDate与GetTime,是为类外如主函数处使用该类的私有数据成员date与time提供方便(否则的话,类外无法直接访问该类的私有数据成员)。另外,两成员函数返回的都为引用,为的是可将返回对象当作一个独立变量来使用(如可以继续作左值等)。例如,假设编制了如下形式的主函数:

void main() {

DateTimeType dttm1(1999,12,31,23,59,59), dttm2;

(dttm1.GetDate()).PrintDate(); //调用对象成员所属类的公有成员函数

cout<<endl;

dttm1.PrintDateTime(); //调用本派生类的成员函数 PrintDateTime

dttm2.PrintDateTime();

dttm1.IncrementSecond(30) ; //调用本派生类成员函数

dttm1.PrintDateTime();

}

样例输出 Copy

1999-12-31
1999-12-31 23:59:59
1-1-1 0:0:0
2000-1-1 0:0:29

代码如下

#include<iostream>
using namespace std;
class DateType
{
	public:
	   int year,month,day;
	public:
	   DateType(int y0=1,int m0=1,int d0=1)
	   {
	   	year=y0;   month=m0;   day=d0;
	   }
	   void PrintDate()
	   {
	   	cout<<year<<"-"<<month<<"-"<<day;
		   }	
};
class TimeType
{
	public:
		int hr,mi,se;
	public:
		TimeType(int hr0=0, int mi0=0, int se0=0)
		{
			hr=hr0;   mi=mi0;   se=se0;
		}
		void PrintTime()
		{
		   cout<<hr<<":"<<mi<<":"<<se; 	
		}
}; 

class DateTimeType
{  //自定义的日期时间类 DateTimeType
DateType date; //类 DateType 的类对象 date 作为其数据成员
TimeType time; //类 TimeType 的类对象 time 作为其另一个数据成员
public:
DateTimeType(int y0=1, int m0=1, int d0=1, int hr0=0, int mi0=0, int se0=0);
//构造函数,设定 DateTimeType 类对象的日期时间,并为各参数设置了默认值
DateType& GetDate(){ return date; } //返回本类的私有数据对象 data
TimeType& GetTime(){ return time; } //返回本类的私有数据对象 time
void IncrementSecond(int s);  //增加若干秒,注意“进位”问题
void PrintDateTime(); //屏幕输出日期时间对象的有关数据
};
DateTimeType::DateTimeType(int y0, int m0, int d0, int hr0, int mi0, int se0):date(y0,m0,d0),time(hr0,mi0,se0)
{
}//切记有默认值参数的构造函数声明后在外面定义不能再写上默认值否则报错 
void DateTimeType::PrintDateTime()  
{
	DateType d=GetDate();
	TimeType t=GetTime();
	d.PrintDate(); cout<<" ";  t.PrintTime();
}
void DateTimeType::IncrementSecond(int s)
{
   time.se+=s;
   while(time.se>=60)
    {
   	time.se-=60;  time.mi+=1;
	}
   while(time.mi>=60)
    {
   	 time.mi-=60;  time.hr+=1;
	}
	while(time.hr>=24)
	{
		time.hr-=24;  date.day++;
	}
	int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};	
	if(date.year%4==0&&date.year%100!=0||date.year%400==0) m[2]=29;
	while(date.day>m[date.month])
	{
		date.day-=m[date.month];   date.month++;
	}
	while(date.month>12)
	{
		date.month-=12;   date.year++;
	}
} 
int main() {
DateTimeType dttm1(1999,12,31,23,59,59), dttm2;
(dttm1.GetDate()).PrintDate(); //调用对象成员所属类的公有成员函数
cout<<endl;
dttm1.PrintDateTime(); //调用本派生类的成员函数 PrintDateTime  
cout<<endl;
dttm2.PrintDateTime();
cout<<endl;
dttm1.IncrementSecond(30) ; //调用本派生类成员函数
dttm1.PrintDateTime();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将爱却晚秋-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值