一、问题描述:
数据的间距问题(函数模板) 类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时标志输入结束。
输出格式:
对每个输入,每行输出一个间距值。
二、解题思路:
首先定义一个点类,有私有函数成员x,y,z,并构造一个减号的运算符重载函数计算俩点之间的距离,在定义一个函数模板,计算俩个数据之间差值,最后,在主函数中的使用while函数进行循环,通过标记值的输入进行输入数据,最后若标记值为0就停止运行。
三、代码实现:
1 #include <iostream> 2 #include<string> 3 #include<cmath> 4 #include<iomanip> 5 using namespace std; 6 class point 7 { 8 private: 9 double x,y,z; 10 public: 11 point(){} 12 point(double a,double b,double c):x(a),y(b),z(c){} 13 double operator-(point &p) 14 { 15 point a; 16 a.x=x-p.x; 17 a.y=y-p.y; 18 a.z=z-p.z; 19 return sqrt(a.x*a.x+a.y*a.y+a.z*a.z); 20 } 21 }; 22 template<class T>double dist(T a,T b) 23 { 24 return abs(a-b); 25 } 26 int main() 27 { 28 int a,b; 29 float p,q; 30 double x1,x2,y1,y2,z1,z2; 31 int flag; 32 while(1) 33 { 34 cin>>flag; 35 if(flag==0) 36 { 37 break; 38 } 39 else if(flag==1) 40 { 41 cin>>a>>b; 42 cout<<dist<int>(a,b)<<endl; 43 } 44 else if(flag==2) 45 { 46 cin>>p>>q; 47 cout<<dist<float>(p,q)<<endl; 48 } 49 else if(flag==3) 50 { 51 cin>>x1>>y1>>z1>>x2>>y2>>z2; 52 point p1(x1,y1,z1),p2(x2,y2,z2); 53 double s; 54 s=p2-p1; 55 cout<<s<<endl; 56 } 57 } 58 }