2023.5.25

发布时间 2023-05-25 22:51:29作者: 牟兆迪

 

 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 }