模板类

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

要求设计一个函数模板

template <class T>

double 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 }

 

posted @ 2023-05-09 22:32  刘冰宇  阅读(34)  评论(0)    收藏  举报