zoukankan      html  css  js  c++  java
  • 定义一个线段类作为矩形类的基类,基类有起点和终点坐标,有输出坐标和长度以及线段和x轴的夹角的成员函数。

    矩形类用线段对象的两个坐标作为自己一条边的位置,它具有另外一个边长,能输出矩形的4个点坐标。给出类的定义并用程序验证它们的功能;

    #include < iostream >

    #include < cmath >

    using namespace std;

    class Point//点类

    {

    protected:

      double x, y;

    public:

      Point() {}

      Point(double a, double b)

      {

        x = a;

        y = b;

      }

      double getX()

      {

        return x;

      }

      double getY()

      {

        return y;

      }

    };

    class Line

    {

    protected:

      Point p1, p2;//Point 对象做成员

      double length, angle;

    public:

      Line(double a, double b, double c, double d) :p1(a, b), p2(c, d)//用两对坐标初始化线段

      {

        init();

      }

      Line(Point a, Point b)//用两个点的对象初始化线段

      {

        p1 = a;

        p2 = b;

        init();

      }

      void init()//计算线段长度,以及和 x 轴的夹角的度数

      {

        double x1 = p1.getX(), y1 = p1.getY();

        double x2 = p2.getX(), y2 = p2.getY();

        length = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));

        angle = atan((y2 - y1) / (x2 - x1));

        angle = angle * 180 / 3.141592653;

      }

      void printXY()

      {

        cout << "(" << p1.getX() << "," << p1.getY() << "); (" << p2.getX() << "," << p2.getY() << ")" << endl;

      }

      void printLength()

      {

        cout << "线段长度:" << length << endl;

      }

      void printAngle()

      {

        cout << "与 x 轴的夹角:" << angle << "°" << endl;

      }

    };

    class Rectangle : public Line

    {

    protected:

      Line *line;

    public:

      Rectangle(double a, double b, double c, double d, double e, double f, double g, double h) :Line(a, b, c, d)

      {

        line = new Line(e, f, g, h);

      }

      Rectangle(Point a, Point b, Point c, Point d) : Line(a, b)//4 个点对象,初始化

      {

        line = new Line(c, d);

      }

      void printPoint()

      {

        cout << "矩形 4 个顶点: ";

        printXY();

        line->printXY();

      }

    };

    void main()

    {

      Point p1(0, 0), p2(4, 3), p3(12, 89), p4(10, -50);

      Line l1(0, 0, 4, 3);

      l1.printXY();

      l1.printLength();

      l1.printAngle();

      Line l2(p1, p2);

      l2.printXY();

      l2.printLength();

      l2.printAngle();

      Rectangle r1(12, 45, 89, 10, 10, 23, 56, 1);

      r1.printPoint();

      Rectangle r2(p1, p2, p3, p4);

      r2.printPoint();

      system("pause");

    }

     运行结果:

  • 相关阅读:
    C#简单操作XML文件的增、删、改、查
    一个感觉还算可以的验证码生成程序
    安装aclocal1报错问题
    php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类
    ofstream和ifstream详细用法[转]
    [原]C++ Soap客户端实例
    PHP中文件读、写、删的操作
    C++ Boost Thread 编程指南
    (转)虚函数和纯虚函数区别
    strcpy和memcpy的区别
  • 原文地址:https://www.cnblogs.com/duanqibo/p/11890066.html
Copyright © 2011-2022 走看看