7-5 利用函数模板,求若个类型数中的最大值 (50分)
要求设计一个函数模板:
template<class T>
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 (x[i] > max) {
max = x[i];
}
}
return max;
}
class Time {
public:
double hours, minutes, seconds;
Time() { hours = 0; minutes = 0; seconds = 0; }
void set(double a, double b, double c) {
hours = a;
minutes = b;
seconds = c;
}
void print() {
cout << hours << ":"<<minutes <<":"<< seconds<<endl;
}
bool operator>(Time a) {
if (hours > a.hours) {
return 1;
}
else if(hours<a.hours){
return 0;
}
else {
if (minutes > a.minutes) {
return 1;
}
else if (minutes < a.minutes) {
return 0;
}
else {
if (seconds > a.seconds) {
return 1;
}
else{
return 0;
}
}
}
}
};
class Date {
public:
int year, month, day;
Date() { year = 0; month = 1; day = 1; }
void set(int a, int b, int c) {
year = a;
month = b;
day = c;
}
void print() {
cout << year <<"/"<< month <<"/"<< day << endl;
}
int operator>(Date a) {
if (year > a.year) {
return 1;
}
else if (year == a.year) {
if (month > a.month) {
return 1;
}
else if (month == a.month) {
if (day > a.day) {
return 1;
}
else
return 0;
}
else if (month < a.month) {
return 0;
}
}
else if (year < a.year) {
return 0;
}
}
};
int main() {
int intArray[100];
double douArray[100];
Date dateArray[100];
Time timeArray[100];
int oper = -30;
int end;
while (oper) {
cin >> oper;
if (oper == -1) {
break;
}
if (oper == 1) {
for (int i = 0; i<100; i++) {
cin >> intArray[i];
if (intArray[i] == 0) {
cout<<Max(intArray, i)<<endl;
break;
}
}
}
if (oper == 2) {
for (int i = 0; i<100; i++) {
cin >> douArray[i];
if (douArray[i] == 0) {
cout<<Max(douArray, i)<<endl;
break;
}
}
}
if (oper == 3) {
for (int i = 0; i<100; i++) {
cin >> timeArray[i].hours;
if (timeArray[i].hours==0) {
Max(timeArray, i).print();
break;
}
cin >> timeArray[i].minutes >> timeArray[i].seconds;
}
}
if (oper == 4) {
for (int i = 0;i<100; i++) {
cin >> dateArray[i].year;
if (dateArray[i].year == 0) {
Max(dateArray, i).print();
break;
}
cin >> dateArray[i].month >> dateArray[i].day;
}
}
}
return 0;
}