Josie0625 2019-07-23 15:33 采纳率: 0%
浏览 482
已采纳

c++多态实现点到零点距离

现在给你一个二维平面上的点a跟三维平面上的点b

要求:输出a的坐标以及a到(0,0)的长度

      输出b的坐标以及b到(0,0,0,)的长度

限制: 1 定义Point_2类表示二维平面点

              定义Point_3类表示三维平面点


  Point_2是由Point_3 进行公有继承得到的


 2 用成员函数getDis()计算距离


                用成员函数showPos()输出坐标


               这两个函数均使用多态。
                                Input

多组数据输入

对于每个测试样例,第一行是两个小数X,Y,第二行是三个小数x,y,z

小数的范围均在double类型的取值

Output
输出共四行

第一行输出(x,y)到(0,0)的距离

第二行输出两个小数x,y x y之间用空格分开

第三行输出(x,y,z)到(0,0,0)的距离

第四行输出三个小数 x,y,z x y z 之间用空格分开

输出均保留2位小数

Sample Input
3.0 4.0
1.0 1.0 0.0
Sample Output
5.00
3.00 4.00
1.41
1.00 1.00 0.00

拜托各位 实在是无能为力 有偿也可只要能帮忙写 可以私信我

  • 写回答

1条回答 默认 最新

  • qtchen_1988 2019-07-23 18:29
    关注

    其实 Point_2是由Point_3 进行公有继承得到的 这个要求不合理的,应该写个抽象类,给它们共同继承比较好;

    既然题目这么要求,就直接上代码了;按题目要求写的。如果你编译器不识别std::cout 就改成cout。我习惯这么写

    #include <iostream>
    #include <math.h>
    #include <iomanip>
    
    using namespace std;
    
    class Point_3
    {
    public:
        Point_3(): m_x(0),m_y(0),m_z(0),m_l(0){}
        virtual ~Point_3(){}
    
        virtual double getDis(double x,double y,double z)
        {
            m_x = x;
            m_y = y;
            m_z = z;
            m_l = sqrt(x*x + y*y + z*z);
            return m_l;
        }
    
        virtual void showPos()
        {
            std::cout << m_l << endl;
            std::cout << m_x << " " << m_y << " " << m_z << endl;
        }
    
        double m_x;
        double m_y;
        double m_z;
        double m_l;
    };
    
    class Point_2:public Point_3
    {
    public:
        Point_2():Point_3(){}
        ~Point_2(){}
    
        virtual double getDis(double x,double y,double z)
        {
            m_x = x;
            m_y = y;
            m_l = sqrt(x*x + y*y);
            return m_l;
        }
    
        virtual void showPos()
        {
            std::cout << fixed << setprecision(2);
            std::cout << m_l << endl;
            std::cout << m_x << " " << m_y << endl;
        }
    };
    
    int main()
    {
    
        double x_2,y_2,x_3,y_3,z_3;
        std::cout << "Pls Input:" << endl;
        std::cin >> x_2 >> y_2;
    
        std::cin >> x_3 >> y_3 >> z_3;
    
        Point_3 *p_2 = new Point_2();
        Point_3 *p_3 = new Point_3();
    
        p_2->getDis(x_2,y_2,0.0);
        p_3->getDis(x_3,y_3,z_3);
    
        std::cout << "******************Output*******************" << endl;
        p_2->showPos();
        p_3->showPos();
    
        return 0;
    }
    
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 slam rangenet++配置
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊