求最大值(函数模板)

发布时间 2023-05-05 21:12:42作者: 轻挼草色

一、问题描述:

两个类如下设计:类Time有三个数据成员,hhmmss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类Date有三个数据成员,yearmonthday分别代表年月日,并有若干构造函数和一个重载><)(大于号或者小于号)的成员函数。

要求设计一个函数模板

template <class T>

T maxn(T x[], int len);

intfloattimedate或者其他类型的数据,返回最大值。

main主函数有如下变量的定义:

int intArray[100];

double douArray[100];

Time timeArray[100];

Date dateArray[100];

其中,hh = 3600 ssmm = 60 ssyear = 365 daymonth = 30 day,对于TimeDate类型,数据在转换成ss或者day后进行运算。

输入格式:

每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3Time类型,4Date类型,若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为Time型元素, 输入Time型数据(hh1 mm1 ss1 hh2 mm2 ss2),以0结束。若为Date型数据,输入Date型数据(year1 month1 day1 year2 month2 day2),以0结束。输入-1时表示全体输入结束。

输出格式:

对每次输入,输出一个最大值。

样例输入:

1 4 5 9 3 7 0

2 4.4 5.5 6.9 3.2 2.7 0

3 18 21 22 18 20 31 18 21 49 0

4 2013 5 14 2013 5 15 2013 4 1 0

-1

样例输出:

9

6.9

18 21 49

2013 5 15

二、代码实现:

 

  1 #include <iostream>
  2 using namespace std;
  3 class Time {
  4 private:
  5     int hh, mm, ss;
  6 public:
  7     Time(){}
  8     Time(int h, int m, int s)
  9     {
 10         hh = h;
 11         mm = m;
 12         ss = s;
 13     }
 14     friend int operator -(Time& t1, Time& t2);
 15     friend bool operator >(Time& t1, Time& t2);
 16     friend ostream& operator <<(ostream& out, Time &t);
 17 };
 18 int operator -(Time& t1, Time& t2)
 19 {
 20     int at1, at2;
 21     at1 = t1.hh * 3600 + t1.mm * 60 + t1.ss;
 22     at2 = t2.hh * 3600 + t2.mm * 60 + t2.ss;
 23     if (at1 - at2 > 0)
 24         return 1;
 25     else
 26         return 0;
 27 }
 28 bool operator >(Time& t1, Time& t2)
 29 {
 30     if(t1-t2>0)
 31         return true;
 32     else
 33         return false;
 34 }
 35 ostream& operator <<(ostream& out, Time& t)
 36 {
 37     out << t.hh << " " << t.mm << " " << t.ss;
 38 }
 39 class Date {
 40 private:
 41     int year, month, day;
 42 public:
 43     Date(){}
 44     Date(int y, int m, int d)
 45     {
 46         year = y;
 47         month = m;
 48         day = d;
 49     }
 50     friend bool operator >(Date& d1, Date& d2);
 51     friend ostream& operator <<(ostream& out, Date& d);
 52 };
 53 bool operator >(Date& d1, Date& d2)
 54 {
 55     int ad1, ad2;
 56     ad1 = d1.year * 365 + d1.month * 30 + d1.day;
 57     ad2 = d2.year * 365 + d2.month * 30 + d2.day;
 58     if (ad1 > ad2)
 59         return true;
 60     else
 61         return false;
 62 }
 63 ostream& operator <<(ostream& out, Date& d)
 64 {
 65     out << d.year << " " << d.month << " " << d.day;
 66 }
 67 template <class T>
 68 T maxn(T x[], int len)
 69 {
 70     T max = x[0];
 71     for (int j = 1; j < len; j++)
 72     {
 73         if (x[j] > max)
 74         {
 75             max = x[j];
 76         }
 77     }
 78     cout << max << endl;
 79     return max;
 80 }
 81 int main()
 82 {
 83     int ty;
 84     cin >> ty;
 85     int Array[100];
 86     double douArray[100];
 87     Time timeArray[100];
 88     Date dateArray[100];
 89     int i;
 90     while (ty != -1)
 91     {
 92         switch (ty)
 93         {
 94         case 1:
 95             for (i=0;  ; i++)
 96             {
 97                 cin >> Array[i];
 98                 if(Array[i]==0)
 99                     break;
100             }
101             maxn(Array, i);
102             break;
103         case 2:
104             for (i=0; ; i++)
105             {
106                 cin >> douArray[i];
107                 if(douArray[i]==0)
108                     break;
109             }
110             maxn(douArray, i);
111             break;
112         case 3:
113             int h, m, s;
114             for (i=0; ; i++)
115             {
116                 cin >> h;
117                 if(h==0)
118                     break;
119                 cin>> m >> s;
120                 timeArray[i]=Time(h, m, s);
121             }
122             maxn(timeArray, i);
123             break;
124         case 4:
125             int year, month, day;
126             for (i=0; ; i++)
127             {
128                 cin >> year;
129                 if(year==0)
130                     break;
131                 cin>> month >> day;
132                 dateArray[i] = Date(year, month, day);
133             }
134             maxn(dateArray, i);
135             break;
136         }
137         cin >> ty;
138     }
139     return 0;
140 }