7-11 2017final函数模板 (20 分)
数据的间距问题(函数模板) 类point有三个数据成员:x、y和z, 分别代表x坐标、y坐标和z坐标,并有若干构造函数和一个重载-(减号,计算两点距离)的成员函数。 要求设计一个函数模板,
template < class T> double dist(T a, T b)
对int,float,point或者其他类型的数据,返回间距。
输入格式:
每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为point类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为point型元素,输入两个point型数据(x1 y1 z1 x2 y2 z2),输入0时标志输入结束。
输出格式:
对每个输入,每行输出一个间距值。
输入样例:
1 2 5
3 2 4 7 5 9 7
2 2.2 9.9
0
输出样例:
3
5.83095
7.7
代码
#include<bits/stdc++.h>
using namespace std;
class point{
private:
double x;
double y;
double z;
public:
point(){
}
point(double ox,double oy,double oz):x(ox),y(oy),z(oz){
}
double squ(double num)
{
return num*num;
}
double operator-(point& out){
return sqrt(squ(x-out.x)+squ(y-out.y)+squ(z-out.z));
}
};
template<class T>
double dist(T a,T b)
{
return abs(a-b);
}
int main()
{
int ops;
while(1)
{
cin>>ops;
if(!ops)
break;
switch(ops)
{
case 1:
{
int x,y;
cin>>x>>y;
cout<<dist(x,y)<<endl;
break;
}
case 2:
{
double x,y;
cin>>x>>y;
cout<<dist(x,y);
break;
}
case 3:
{
point x,y;
double xa,xb,xc,ya,yb,yc;
cin>>xa>>xb>>xc>>ya>>yb>>yc;
x=point(xa,xb,xc);y=point(ya,yb,yc);
cout<<dist(x,y)<<endl;
break;
}
}
}
return 0;
}