一。问题描述

两个类如下设计:类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后进行运算。

二。代码实现

 

#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;
}

 




 

posted on 2023-05-06 09:58  标志蛋挞  阅读(27)  评论(0)    收藏  举报