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

两个类如下设计:类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 }
时间: 2024-12-30 22:26:10

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

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

三个类如下设计:类cTime有三个数据成员,hh,mm,ss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数.类point有两个数据成员,x,y分别坐标,并有若干构造函数和一个重载-(减号)的成员函数.类date有三个数据成员,year,month,day分别代表年月日,并有若干构造函数和一个重载-(减号)的成员函数. 要求设计一个函数模板template <\class T>\ double dist(T a, T b) 对int,float,cTime,point和da

【C/C++学院】0814-引用高级、引用高级增加/auto自动变量自动根据类型创建数据/Bool/Enum/newdelete全局/大数据乘法与结构体/函数模板与auto/宽字符本地化/inline

引用高级.引用高级增加 #include<iostream> #include<stdlib.h> // int a[10] // int (&ra)[10] // int a[2][5] // int (&ra)[2][5] void main1() { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int(&ra)[10](a);//引用就是给原来的变量有一个别名同一个地址 int i = 0; for (

[C++] 用Xcode来写C++程序[5] 函数的重载与模板

用Xcode来写C++程序[5] 函数的重载与模板 此节包括函数重载,隐式函数重载,函数模板,带参数函数模板 函数的重载 #include <iostream> using namespace std; int operate (int a, int b) { return (a * b); } double operate (double a, double b) { return (a / b); } int main () { int x = 5; int y = 2; double n

C++ Primer 学习笔记_86_模板与泛型编程 --重载与函数模板

模板与泛型编程 --重载与函数模板 引言: 函数模板可以重载:可以定义有相同名字但参数数目或类型不同的多个函数模板,也可以定义与函数模板有相同名字的普通非模板函数. 但是,声明一组重载函数模板不保证可以成功调用它们,重载的函数模板可能会导致二义性. 一.函数匹配与函数模板 如果重载函数中既有普通函数又有函数模板,确定函数调用的步骤如下: 1.为这个函数名建立候选函数集合,包括: a.与被调用函数名字相同的任意普通函数. b.任意函数模板实例化,在其中,模板实参推断发现了与调用中所用函数实参相匹配

【C/C++学院】(11)泛型编程/函数模板/类模板

1.泛型编程基础 #include "iostream" using namespace std; void swap(int &a, int &b) { int c; c = a; a = b; b = c; } void swap(float &a, float &b) { float c; c = a; a = b; b = c; } void main() { int a = 1, b = 2; swap(a, b); float a1 = 1,

c++之函数模板

模板 模板把函数或类要处理的数据类型参数化,表现为参数的多态 性,称为类属. 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据 对象的通用行为. 什么是模板: 类属 —— 类型参数化,又称参数模板 使得程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递 C++提供两种模板机制:  函数模板  类模板 函数模板声明: template  < 类型形式参数表 > 类型  函数名 ( 形式参数表 ) {     语句序列 }  函数模板定义由模板说明和函数定义组成  模板

函数模板和模板函数

1.1函数模板的声明函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数.函数模板的声明形式为:template<typename 数据类型参数标识符><返回类型><函数名>(参数表){ 函数体}其中,template是定义模板函数的关键字:template后面的尖括号不能省略:typename(或class)是声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型标识符.这样,在以

函数模板与模板函数

1.函数指针--指针函数  函数指针的重点是指针.表示的是一个指针,它指向的是一个函数,例子: int   (*pf)(); 指针函数的重点是函数.表示的是一个函数,它的返回值是指针.例子: int*   fun(); 2.数组指针--指针数组  数组指针的重点是指针.表示的是一个指针,它指向的是一个数组,例子: int   (*pa)[8]; 指针数组的重点是数组.表示的是一个数组,它包含的元素是指针.例子; int*   ap[8]; 3.类模板--模板类(class   template-

[c++][语言语法]函数模板和模板函数

参考:http://blog.csdn.net/beyondhaven/article/details/4204345 1.函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. 函数模板的声明形式为: template<typename 数据类型参数标识符> <返回类型><函数名>(参数表) {     函数体 } 其中,template