一、问题描述:
两个类如下设计:类Time有三个数据成员,hh,mm,ss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类Date有三个数据成员,year,month,day分别代表年月日,并有若干构造函数和一个重载>(<)(大于号或者小于号)的成员函数。
要求设计一个函数模板
template <class T>
T maxn(T x[], int len);
对int,float,time和date或者其他类型的数据,返回最大值。
main主函数有如下变量的定义:
int intArray[100];
double douArray[100];
Time timeArray[100];
Date dateArray[100];
其中,hh = 3600 ss, mm = 60 ss, year = 365 day, month = 30 day,对于Time和Date类型,数据在转换成ss或者day后进行运算。
输入格式:
每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Time类型,4为Date类型,若为整型元素,接着输入整型数据,以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 }
标签:函数,int,最大值,break,Time,Date,100,day,模板 From: https://www.cnblogs.com/tljx-cen/p/17375378.html