7-11 2017final函数模板 (20 分)

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;
}
原文地址:https://www.cnblogs.com/BeautifulWater/p/14826373.html