数据的最大值问题(重载+函数模板)

Posted hello_OK

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据的最大值问题(重载+函数模板)相关的知识,希望对你有一定的参考价值。

两个类如下设计:类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 }

 

以上是关于数据的最大值问题(重载+函数模板)的主要内容,如果未能解决你的问题,请参考以下文章

数据的间距问题(重载+函数模板)

模板函数 重载/特化

数据的间距问题(重载+函数模板)

C++学习33 函数模板

C++ 函数重载,函数模板和函数模板重载,选择哪一个?

从重载的模板函数中选择的规则是啥?