三个类如下设计:类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或者其他类型的数据,返回间距。
每一行为一个操作,每行的第一个数字为元素类型,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 #include
2 #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://int
115 {
116 int a,b;
117 cin>>a>>b;
118 cout119 }break;
120 case 2://double
121 {
122 double a,b;
123 cin>>a>>b;
124 cout<endl;
125 }break;
126 case 3://Point
127 {
128 Point a,b;
129 cin>>a>>b;
130 cout<endl;
131 }break;
132 case 4://Time
133 {
134 Time a,b;
135 cin>>a>>b;
136 cout<endl;
137 }break;
138 case 5://date
139 {
140 date a,b;
141 cin>>a>>b;
142 cout<endl;
143 }break;
144 }
145 }
146 return 0;
147 }