三个类如下设计:类cTime有三个数据成员,hh,mm,ss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类point有两个数据成员,x,y分别坐标,并有若干构造函数和一个重载-(减号)的成员函数。类date有三个数据成员,year,month,day分别代表年月日,并有若干构造函数和一个重载-(减号)的成员函数。 要求设计一个函数模板template <\class T>\ double dist(T a, T b) 对int,float,cTime,point和date或者其他类型的数据,返回间距。
其中,hh = 3600 ss, mm = 60 ss, year = 365 day, month = 30 day,对于cTime和date类型,数据在转换成ss或者day后进行运算。
输入格式:
每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为point类型,4,为time类型,5为date类型,若为整型元素,接着输入两个整型数据,
若为浮点型元素,接着输入两个浮点型数据,若为point型元素,输入两个point型数据(x1 y1 x2 y2),若为time型元素, 输入两个cTime型数据(hh1 mm1 ss1 hh2 mm2 ss2),若为date型数据,输入两个date型数据(year1 month1 day1 year2 month2 day2)。输入0时标志输入结束。
输出格式:
对每个输入,每行输出一个间距值。
样例输入:
1 2 5
4 18 21 22 18 20 31
3 2 4 5 9
5 2013 5 14 2013 5 15
2 2.2 9.9
0
样例输出:
3
51
5.83095
1
7.7
-----------------------------------------------------------------------
参考代码
-----------------------------------------------------------------------
1 #include2 #include 3 using namespace std; 4 //实现Time类 5 class Time 6 { 7 private: 8 int hh; 9 int mm; 10 int ss; 11 public: 12 Time()//无参构造函数 13 { 14 hh = 0; 15 mm = 0; 16 ss = 0; 17 } 18 void set(int h,int m,int s)//赋值成员数据 19 { 20 hh=h; 21 mm=m; 22 ss=s; 23 } 24 friend int operator-(Time ,Time); 25 friend istream& operator>>(istream &,Time &); 26 }; 27 //重载>> 28 istream & operator>>(istream & set,Time &t) 29 { 30 set>>t.hh>>t.mm>>t.ss; 31 return set; 32 } 33 //重载- 34 int operator-(Time t1,Time t2) 35 { 36 int totalSecond1=t1.hh*3600+t1.mm*60+t1.ss; 37 int totalSecond2=t2.hh*3600+t2.mm*60+t2.ss; 38 return totalSecond2-totalSecond1; 39 } 40 //实现date类 41 class date 42 { 43 private: 44 int year; 45 int month; 46 int day; 47 public: 48 date() 49 { 50 year = 0; 51 month = 0; 52 day = 0; 53 } 54 void set(int y,int m,int d) 55 { 56 year=y; 57 month=m; 58 day=d; 59 } 60 friend int operator-(date, date); 61 friend istream& operator>>(istream &,date &); 62 }; 63 //重载>> 64 istream & operator>>(istream & set,date &d) 65 { 66 set>>d.year>>d.month>>d.day; 67 return set; 68 } 69 //重载- 70 int operator-(date d1,date d2) 71 { 72 int totalDay1=d1.year*365+d1.month*30+d1.day; 73 int totalDay2=d2.year*365+d2.month*30+d2.day; 74 return totalDay1-totalDay2; 75 } 76 //实现point 77 class Point 78 { 79 private: 80 int x; 81 int y; 82 public: 83 Point() 84 { 85 x=y=0; 86 } 87 void set(int a,int b) 88 { 89 x=a; 90 y=b; 91 } 92 friend double operator-(Point,Point); 93 friend istream& operator>>(istream &,Point &); 94 }; 95 //重载>> 96 istream & operator>>(istream & set,Point &p) 97 { 98 set>>p.x>>p.y; 99 return set;100 }101 //重载-102 double operator-(Point p1,Point p2)103 {104 return sqrt((1.0*p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));105 } 106 int main()107 {108 int classType;109 while(cin>>classType)110 {111 if(classType==0)break;112 switch(classType)113 {114 case 1://int115 {116 int a,b;117 cin>>a>>b;118 cout< < >a>>b;124 cout< < >a>>b;130 cout< < >a>>b;136 cout< < >a>>b;142 cout< <
欢迎指教,一起学习!
未经本人允许,请勿转载!
谢谢!