实现一个抽象基类Clock,由此派生出类ClockA和ClockB,其中A包含hour,minute,second变量表示时间,而B使用quarter(=15min)和second来表示,输入了n个ClockA类型的对象,m个ClockB类型的对象,它们被统一存放在一个*Clock类型的数组里,现在想要对这个数组按照其中存储的时间长短,由短到长进行排序(排序部分已给出,需要在外部实现cmp函数,如果a的时间比b少,则返回true),排序后输出,输出函数已给出,完善剩余内容
#include<bits/stdc++.h>
using namespace std;
class Clock;
bool cmp(Clock *a,Clock *b);
//------------------------------------------code here------------------------------------------------
//--------------------------------------------------------------------------------------------------------
void ClockA::print(){cout<<hour<<':'<<minute<<':'<<second<<'\n';}
void ClockB::print(){cout<<quarter<<':'<<second<<'\n';}
int main()
{
vector<Clock*> v;
int n,m,a,b,c;
Clock* tim;
cin>>n>>m;
while(n--)
{
cin>>a>>b>>c;
tim=new ClockA(a,b,c);//abc代表时分秒
v.push_back(tim);
}
while(m--)
{
cin>>a>>b;
tim=new ClockB(a,b);//a,b代表 刻,秒
v.push_back(tim);
}
sort(v.begin(),v.end(),cmp);
for(auto x:v)x->print();
}
输入描述格式见代码
输出描述格式见代码
只需要提供类的实现
样例输入输出
3 2
10 15 30
10 14 31
10 10 10
50 0
41 0
10:10:10
10:14:31
41:0
10:15:30
50:0
class Clock{
public:
virtual void print()=0;
virtual int getsum()=0;
};
class ClockA:public Clock{
int hour;
int minute;
int second;
public:
int getsum(){
int sum=0;
sum+=hour*3600+minute*60+second;
return sum;
}
ClockA(int h,int m,int s):hour(h),minute(m),second(s){};
void print();
};
class ClockB:public Clock{
int quarter;
int second;
public:
ClockB(int q,int s):quarter(q),second(s){};
void print();
int getsum() {
int sum=0;
sum+=quarter*15*60+second;
return sum;
}
};
bool cmp(Clock *a,Clock *b){
if(a->getsum()<b->getsum()){
return true;}
else return false;
}