7. Time时间类

【问题描述】

设计一个Time类,并设计多个重载的构造函数,可以设置时间、进行时间的加减运算、按12小时格式和24小时格式输出时间。

例如:

其中构造函数Time::Time(int s)根据总秒数计算hour、minute、second并构造对象;

成员函数void Time::print_12()按12小时格式显示时间,如“09:20:45 AM”、“03:15:20 PM”;

成员函数void Time::print_24()按24小时格式显示时间,如“09:20:45”、“4:30:20”;

成员函数Time Time::Add(Time&)用来实现两个时间对象的值进行相加;(请注意:创建临时对象保存结果,并返回该对象)

成员函数Time Time::Sub(Time&)用来实现两个时间对象的值进行相减。(请注意:使用时间值大的减去小的,避免出现负数情况)

为了检验Time类的功能,主函数按如下方式设计:

【输入形式】无输入

【输出形式】程序运行结果

【样例输入】无

【样例输出】

t2:01:23:34 PM

t2:13:23:34

t1+t2:15:57:34

t1-t2:10:49:34

t3:01:02:03

///Time类
#include<iostream>
using namespace std;
#include<stdio.h>
class Time{
   int hour,minute,second;
   public:
   Time(int h,int m,int s=0);
   Time(int s=0);
   int SecCalc(){return(hour*60+minute)*60+second;
   }
   void SetTime(int h=0,int m=0,int s=0);
   void print_12();
   void print_24();
   Time Add(Time &);
   Time Sub(Time &); 
}; 
Time::Time(int h,int m,int s)/error出现在这里!!!!忘了写这个函数体
{
	hour=h;
	minute=m;
	second=s;
}
void Time::SetTime(int hh,int mm,int ss)//此时不需要些hh=0只写参数就好
{
	hour=hh;
	minute=mm;
	second=ss;
}
Time::Time(int s)比之前的要简单些 
{
	hour=(s/3600)%24;
	s%=3600;
	minute=s/60;
	second=s%60;
}
void Time::print_12()
{
	int h=hour;
	
	h%=12;
	printf("%02d:%02d:%02d",h,minute,second);
	if(hour>=12) cout<<" PM";
	else cout<<" AM";
	cout<<endl;
}
void Time::print_24()
{
	printf("%02d:%02d:%02d",hour,minute,second);
	cout<<endl;
}
Time Time::Add(Time &T)
{
	Time result(0,0,0);/good 为了minute++更方便 
	result.second=second+T.second;
	if(result.second>=60)
	{
		result.second-=60;
		result.minute++;
	}
	result.minute+=minute+T.minute;
	if(result.minute>=60)
	{
		result.minute-=60;
		result.hour++;
	}
	result.hour+=hour+T.hour; 
	if(result.hour>=24)
	{
		result.hour-=24;///result%=24也可 
	}
	return result;
}
Time Time::Sub(Time &T)
{
	long max,min;
	max=T.SecCalc();先定义后比看起来要比先比后定义舒服 
	min=SecCalc();
	if(max<min)
	{
		long f=max;
		max=min;
		min=f;
	}
	int result=max-min;
	return Time(result);//会简单很多 
}
int main()
{
	Time t1(2,34),t2,t3(3723);
	t2.SetTime(13,23,34);
	cout<<"t2:";
	t2.print_12();
	cout<<endl<<"t2:";
	t2.print_24();
	cout<<"\nt1+t2";///原来这个也是可以表示空格的
	t1.Add(t2).print_24();
	cout<<"\nt1-t2:";
	t1.Sub(t2).print_24();
	cout<<endl<<"t3:";
	t3.print_24();
	return 0;
}

小总结一下

这道题出现了一个小error

[Error] ld returned 1 exit status

然后去查了一下

  • 1.程序没有主函数main()
  • 2.printf/scanf书写错误
  • 3.在主函数中出现自定义函数名书写错误(即出现在主函数前未出现的自定义函数)
  • 4.2当自定义函数只进行了声明,主函数便进行调用(我的是这个原因)
  • 5.上一个运行结果未关闭

小本本记下来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值