1 #include<iostream>
2 using namespace std;
3 #include<cmath>
4 //2017final函数模板
5
6 class Point
7 {
8 public:
9 //构造函数赋初值
10 Point(double a, double b, double c) :m_x(a), m_y(b), m_z(c) {}
11 //把重载函数声明为类的友元,可以访问类中的私有元素
12 //也可以不声明友元,直接把那三个坐标写到public 里面
13 friend double operator -(Point p1, Point p2);
14 private:
15 double m_x;
16 double m_y;
17 double m_z;
18
19 };
20 //重载减号(-)
21 double operator -(Point p1, Point p2)
22 {
23 //空间内两点求距离
24 //sqrt计算开方
25 //pow double pow(double x, double y) 返回 x 的 y 次幂.
26 //p1.m_x - p2.m_x, 2.0) 返回两数差的2次方
27 return sqrt(pow(p1.m_x - p2.m_x, 2.0) + pow(p1.m_y - p2.m_y, 2.0) + pow(p1.m_z - p2.m_z, 2.0));
28 }
29 //间距模板
30 template<class T1 , class T2>
31 double Distance(T1 a, T2 b)
32 {
33 return abs(a - b); //返回距离的绝对值
34 }
35 int main()
36 {
37 int n; //元素类型变量
38 cin >> n;
39 while (n!=0)
40 {
41 if (n == 1) //整型元素
42 {
43 int a, b;
44 cin >> a >> b;
45 cout << Distance(a, b) << endl; //调用模板函数,输出两点之间的距离
46 }
47 if (n == 2) //浮点型数据
48 {
49 float a, b;
50 cin >> a >> b;
51 cout << Distance(a, b) << endl;
52 }
53 if (n == 3) //point 类型
54 {
55 double a1, b1, c1, a2, b2, c2;
56 cin >> a1 >> b1 >> c1 >> a2 >> b2 >> c2;
57 Point p1(a1, b1, c1);
58 Point p2(a2, b2, c2);
59 cout <<Distance(p1, p2) << endl;
60
61 }
62 cin >> n; //输入0跳出while循环
63 }
64 return 0;
65
66 }