zoukankan      html  css  js  c++  java
  • 数据的最大值问题(重载+函数模板)

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

    要求设计一个函数模板template <class T> double maxn(T x[], int len) 对int,float,time和date或者其他类型的数据,返回最大值。

    主函数有如下数据成员:

    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 //实现Time类 
      4 class Time
      5 {
      6     private:
      7         int hh;
      8         int mm;
      9         int ss;
     10     public:
     11         Time()//无参构造函数 
     12         {
     13             hh = 0;
     14             mm = 0;
     15             ss = 0;
     16         }
     17         void set(int h,int m,int s)//赋值成员数据 
     18         {
     19             hh=h;
     20             mm=m;
     21             ss=s;
     22         }
     23         friend bool operator >(Time &t1,Time &t2);//重载> 
     24         friend ostream & operator <<(ostream &,Time &);//重载<< 
     25 };
     26 //重载Time的> 
     27 bool operator >(Time &t1,Time &t2)
     28 {
     29     int totalSecond1=t1.hh*3600+t1.mm*60+t1.ss;
     30     int totalSecond2=t2.hh*3600+t2.mm*60+t2.ss;
     31     if(totalSecond1>totalSecond2)//用总的秒数比较 
     32         return true;
     33     else
     34         return false;
     35 }
     36 //重载Time的<< 
     37 ostream &operator <<(ostream &output,Time&t)
     38 {
     39     output<<t.hh<<" "<<t.mm<<" "<<t.ss;
     40     return output;
     41 }
     42 //实现date类  
     43 class date
     44 {
     45     private:
     46         int year;
     47         int month;
     48         int day;
     49     public:
     50         date()
     51         {
     52             year = 0;
     53             month = 0;
     54             day = 0;
     55         }
     56         void set(int y,int m,int d)
     57         {
     58             year=y;
     59             month=m;
     60             day=d;
     61         }
     62         friend bool operator >(date &d1,date &d2);
     63         friend ostream & operator <<(ostream &,date &);
     64 };
     65 //重载 >
     66 bool operator >(date &d1,date &d2)
     67 {
     68     int totalDay1=d1.year*365+d1.month*30+d1.day;
     69     int totalDay2=d2.year*365+d2.month*30+d2.day;
     70     if(totalDay1>totalDay2)
     71         return true;
     72     else
     73         return false;
     74 }
     75 //重载<< 
     76 ostream & operator <<(ostream &output,date &d)
     77 {
     78     output<<d.year<<" "<<d.month<<" "<<d.day;
     79     return output;
     80 }
     81 //实现类模板 
     82 template <class T>
     83 T maxn(T x[], int len)
     84 {
     85     T max;
     86     max=x[0];
     87     for(int i=0; i<len; i++)max=max>x[i]?max:x[i];
     88     cout<<max<<endl;//这里的<<已经重载完成可以适应Time和date类 
     89     return max;
     90 }
     91 
     92 int main()
     93 {
     94     //数组数据 
     95     int intArray[100];
     96     double douArray[100];
     97     Time TimeArray[100];
     98     date dateArray[100];
     99     
    100     int classType;
    101     int i=0;
    102     while(cin>>classType)//持续输入 
    103     {
    104         if(classType==-1)break;
    105            switch(classType)
    106         {
    107             case 1://int 
    108             {
    109                 while(cin>>intArray[i])//持续输入 
    110                    {
    111                       if(intArray[i]==0)  break;
    112                     i++;
    113                 }            
    114                 maxn(intArray,i);    
    115             }break;
    116             case 2://double
    117             {
    118                 while(cin>>douArray[i])
    119                 {
    120                     if(douArray[i]==0)   break;
    121                         i++;
    122                 }
    123                 maxn(douArray,i);
    124             }break;
    125             case 3://Time
    126             {
    127                 int hour,minute,second;
    128                 while(cin>>hour)//独立出hour判断时候使用 
    129                 {
    130                     if(hour==0)    break;
    131                     cin>>minute>>second;
    132                     TimeArray[i].set(hour,minute,second);
    133                     i++;
    134                 }
    135             maxn(TimeArray,i);//执行最大值 
    136             }break;
    137             case 4://date            
    138             {
    139                 int years,months,days;
    140                 while(cin>>years)
    141                 {
    142                     if(years==0)    break;
    143                     cin>>months>>days;
    144                     dateArray[i].set(years,months,days);
    145                     i++;
    146                 }
    147                 maxn(dateArray,i);       
    148             }break;
    149         }
    150     }
    151     return 0;
    152 }
    个人分享,欢迎指导,未经允许,请勿转载。谢谢!
  • 相关阅读:
    Android学习笔记之-----讯飞语音识别实例化RecognizerDialog参数出现错误的解决方法
    java基本数据类型取值范围
    中国教育
    git push --help
    cherry Tree的严重漏洞
    程序的核心是什么
    BeanUtils.getProperty性能分析
    Java各种反射性能对比
    Spring AOP无法拦截Controller中的方法
    Mock单元测试
  • 原文地址:https://www.cnblogs.com/hello-OK/p/6926906.html
Copyright © 2011-2022 走看看