要求设计一个函数模板:
template
T Max(T x[],int len)
可以对int、float、Time(时间类)和Date(日期类)或其他基本类型的数据求最大值。 主函数有如下数据成员: int intArray[100]; double douArray[100]; Time timeArray[100]; date dateArray[100]; 【提示】:定义时间类:Time,其含有三个数据成员:hours、minutes、seconds,分别代表时、分和秒,并定义构造函数、输出函数及重载的>(或<)运算符函数等成员函数。 定义日期类:Date,其含有三个数据成员:year、month、day,分别代表年、月、日,定义构造函数、重载的>(或<)运算符函数等成员函数。
输入格式:
每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Time类型,4为Date类型。若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为Time型元素, 输入Time型数据:hour1 month1 second1 hour2 month2 second2……,以0结束。若为Date型数据,输入Date型数据:year1 month1 day1 year2 month2 day2 ……,以0结束。输入-1时表示全体输入结束。
输出格式:
对每次输入,输出一个最大值。
输入样例:
在这里给出一组输入。例如:
4 2020 1 1 2012 5 11 2013 4 1 0
4 2020 1 1 2020 3 1 2020 12 1 0
3 18 21 11 23 34 56 2 56 59 0
1 4 5 9 3 7 0
2 2.7 3.2 6.9 4 5 0
1 7 3 9 5 4 0
1 0
2 0
3 0
4 0
-1
输出样例:
在这里给出相应的输出。例如:
2020/1/1
2020/12/1
23:34:56
9
6.9
9
0
0
0:0:0
0/1/1
#include<iostream>
using namespace std;
template<class T>
T Max(T x[], int len) {
T max=x[0];
for (int i = 1; i < len; i++) {
if (max < x[i])
max = x[i];
}
return max;
}
class Time {
private:
int hour;
int minute;
int second;
public:
Time(int h = 0, int m = 0, int s = 0) {
hour = h;
minute = m;
second = s;
}
void printTime() {
cout << hour << ":" << minute << ":" << second << endl;
}
bool operator<( Time s2) {
if (hour < s2.hour) {
return 1;
}
else if (hour > s2.hour) {
return 0;
}
else {
if (minute < s2.minute) {
return 1;
}
else if (minute > s2.minute) {
return 0;
}
else {
if (second < s2.second) {
return 1;
}
else {
return 0;
}
}
}
}
};
class Date {
private:
int year;
int month;
int day;
public:
Date(int h = 0, int m = 1, int s = 1) {
year = h;
month = m;
day = s;
}
void printDate() {
cout << year << "/" << month << "/" <<day<< endl;
}
bool operator<( Date s2) {
if (year < s2.year) {
return 1;
}
else if (year > s2.year) {
return 0;
}
else {
if (month < s2.month) {
return 1;
}
else if (month > s2.month) {
return 0;
}
else {
if (day < s2.day) {
return 1;
}
else {
return 0;
}
}
}
}
};
int main() {
int c = 0;
int intArray[100];
double douArray[100];
Time timeArray[100];
Date dateArray[100];
while (cin >> c) {
if (c == -1)
break;
else if (c == 1) {
int len = 0;
for (int i = 0; i < 100; i++) {
cin >> intArray[i];
if (intArray[i] == 0)
break;
len++;
}
int max = Max(intArray, len);
cout << max << endl;
}
else if (c == 2) {
int len = 0;
for (int i = 0; i < 100; i++) {
cin >> douArray[i];
if (douArray[i] == 0)
break;
len++;
}
double max = Max(douArray, len);
cout << max << endl;
}
else if (c == 3) {
int len = 0,a=0,b=0,c=0;
for (int i = 0; i < 100; i++) {
cin >> a;
if (a==0)
break;
cin >> b >> c;
Time p(a, b, c);
timeArray[i] = p;
len++;
}
if(len==0)
timeArray[0]=Time();
Time max = Max(timeArray, len);
max.printTime();
}
else if (c == 4) {
int len = 0, a = 0, b = 0, c = 0;
for (int i = 0; i < 100; i++) {
cin >> a ;
if (a == 0 )
break;
cin >> b >> c;
Date p(a, b, c);
dateArray[i] = p;
len++;
}
if(len==0)
dateArray[0]=Date();
Date max = Max(dateArray, len);
max.printDate();
}
}
return 0;
}