【问题描述】
设计一个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.上一个运行结果未关闭
小本本记下来