一。问题描述
两个类如下设计:类Time有三个数据成员,hh,mm,ss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类Date有三个数据成员,year,month,day分别代表年月日,并有若干构造函数和一个重载>(<)(大于号或者小于号)的成员函数。
要求设计一个函数模板
template <class T>
double 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后进行运算。
二。代码实现
#include <iostream> using namespace std; class Time { private: int hh, mm, ss; public: Time(){} Time(int h, int m, int s) { hh = h; mm = m; ss = s; } friend int operator -(Time& t1, Time& t2); friend bool operator >(Time& t1, Time& t2); friend ostream& operator <<(ostream& out, Time &t); }; int operator -(Time& t1, Time& t2) { int at1, at2; at1 = t1.hh * 3600 + t1.mm * 60 + t1.ss; at2 = t2.hh * 3600 + t2.mm * 60 + t2.ss; if (at1 - at2 > 0) return 1; else return 0; } bool operator >(Time& t1, Time& t2) { if(t1-t2>0) return true; else return false; } ostream& operator <<(ostream& out, Time& t) { out << t.hh << " " << t.mm << " " << t.ss; } class Date { private: int year, month, day; public: Date(){} Date(int y, int m, int d) { year = y; month = m; day = d; } friend bool operator >(Date& d1, Date& d2); friend ostream& operator <<(ostream& out, Date& d); }; bool operator >(Date& d1, Date& d2) { int ad1, ad2; ad1 = d1.year * 365 + d1.month * 30 + d1.day; ad2 = d2.year * 365 + d2.month * 30 + d2.day; if (ad1 > ad2) return true; else return false; } ostream& operator <<(ostream& out, Date& d) { out << d.year << " " << d.month << " " << d.day; } template <class T> T maxn(T x[], int len) { T max = x[0]; for (int j = 1; j < len; j++) { if (x[j] > max) { max = x[j]; } } cout << max << endl; return max; } int main() { int ty; cin >> ty; int Array[100]; double douArray[100]; Time timeArray[100]; Date dateArray[100]; int i; while (ty != -1) { switch (ty) { case 1: for (i=0; ; i++) { cin >> Array[i]; if(Array[i]==0) break; } maxn(Array, i); break; case 2: for (i=0; ; i++) { cin >> douArray[i]; if(douArray[i]==0) break; } maxn(douArray, i); break; case 3: int h, m, s; for (i=0; ; i++) { cin >> h; if(h==0) break; cin>> m >> s; timeArray[i]=Time(h, m, s); } maxn(timeArray, i); break; case 4: int year, month, day; for (i=0; ; i++) { cin >> year; if(year==0) break; cin>> month >> day; dateArray[i] = Date(year, month, day); } maxn(dateArray, i); break; } cin >> ty; } return 0; }
 
                     
                    
                 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号