平面上的点和线——Point类、Line类 (VII)

来源:互联网 发布:软件功能介绍 编辑:程序博客网 时间:2024/06/05 06:46

Description

在数学上,平面直角坐标系上的点用X轴和Y轴上的两个坐标值唯一确定,两点确定一条线段。现在我们封装一个“Point类”和“Line类”来实现平面上的点的操作。
根据“append.cc”,完成Point类和Line类的构造方法和show()方法,输出各Line对象和Point对象的构造和析构次序。
接口描述:
Point::showCounter()方法:按格式输出当前程序中Point对象的计数。
Point::showSum()方法:按格式输出程序运行至当前存在过的Point对象总数。
Line::showCounter()方法:按格式输出当前程序中Line对象的计数。
Line::showSum()方法:按格式输出程序运行至当前存在过的Line对象总数。

Input

输入的第一行为N,表示后面有N行测试样例。
每行为两组坐标“x,y”,分别表示线段起点和终点的x坐标和y坐标,两组坐标间用一个空格分开,x和y的值都在double数据范围内。

Output

输出格式见sample。
C语言的输入输出被禁用。

Sample Input

40,0 1,11,1 2,32,3 4,50,1 1,0

Sample Output

Current : 3 points.In total : 3 points.Current : 6 lines.In total : 6 lines.Current : 17 points.In total : 17 points.Current : 6 lines.In total : 7 lines.Current : 15 points.In total : 17 points.Current : 6 lines.In total : 8 lines.Current : 17 points.In total : 21 points.Current : 6 lines.In total : 9 lines.Current : 15 points.In total : 21 points.Current : 6 lines.In total : 10 lines.Current : 17 points.In total : 25 points.Current : 6 lines.In total : 11 lines.Current : 15 points.In total : 25 points.Current : 6 lines.In total : 12 lines.Current : 17 points.In total : 29 points.Current : 6 lines.In total : 13 lines.Current : 15 points.In total : 29 points.Current : 9 lines.In total : 17 lines.Current : 21 points.In total : 37 points.Current : 13 lines.In total : 21 lines.Current : 21 points.In total : 45 points.

#include <iostream>#include <iomanip>#include <cmath>using namespace std;class Point{    friend class Line;private:    double x,y;public:    static int sum;    static int val;    Point()    {        x=0;        y=0;        sum++;        val++;    }    Point(double a,double b)    {        x=a;        y=b;        sum++;        val++;    }    Point(Point &a)    {        x=a.x;        y=a.y;        sum++;        val++;    }    static void showSum()    {        cout << "In total : " << val << " points.\n";    }    static void showCounter()    {        cout << "Current : " << sum << " points.\n";    }    ~Point()    {        sum--;    }};int Point::sum=0;int Point::val=0;class Line{    friend class Point;private:    Point p,q;    double a,b,c,d;public:    static int sum2;    static int val2;    Line()    {        sum2++;        val2++;    }    Line(Point & a,Point & b):p(a),q(b)    {        sum2++;        val2++;    }    Line(Line &g):p(g.p),q(g.q)    {        sum2++;        val2++;    }    static void showSum()    {        cout << "In total : " << val2 << " lines.\n";    }    static void showCounter()    {        cout << "Current : " << sum2 << " lines.\n";    }    void readLine()    {        char ch;        cin >> a >> ch >> b >> c >> ch >> d;        p.x=a;        p.y=b;        q.x=c;        q.y=d;    }    ~Line()    {        sum2--;    }};int Line::sum2=0;int Line::val2=0;int main(){    int num, i;    Point p(1, -2), q(2, -1), t;    t.showCounter();    t.showSum();    std::cin>>num;    Line line[num + 1];    for(i = 1; i <= num; i++)    {        Line *l1, l2;        l1->showCounter();        l1->showSum();        l1 = new Line(p, q);        line[i].readLine();        p.showCounter();        p.showSum();        delete l1;        l2.showCounter();        l2.showSum();        q.showCounter();        q.showSum();    }    Line l1(p, q), l2(p,t), l3(q,t), l4(l1);    Line::showCounter();    Line::showSum();    Point::showCounter();    Point::showSum();    Line *l = new Line[num];    l4.showCounter();    l4.showSum();    delete[] l;    t.showCounter();    t.showSum();}


没有多余无用函数,做的时候主要是l1的处理卡住了。

l1=new Line(p,q) 需要 Point(Point &a)  和 Line(Line &g)两个函数。


0 0
原创粉丝点击