zoukankan      html  css  js  c++  java
  • 椭圆类——3 (类的复杂设计)

    【问题描述】
    (1)在前一周作业题(椭圆类——2)的基础上,增加一个Point类(点类),
    包括私有成员横纵坐标x和y(均为int型),以及参数带默认值的构造函数Point(x=0,y=0);
    (2)给Point类增加拷贝(复制)构造函数Point(Point& p);
    (3)增加析构函数~Point();输出"Point xigou"以及待析构的点的横纵坐标。
    (4)增加取横纵坐标值的函数int GetX(); int GetY();
    (5)删除Ellipse类原来的四个数据成员,重新修改为 Point a,b;
    (6)修改Ellipse原来的构造函数Ellipse(int x1,int y1,int x2,int y2);
    注意使用冒号语法对组合成员进行构造,并在构造函数里输出“gouzao 1”和x1,y1,x2,y2的值。
    (7)增加一个Ellipse类的构造函数Ellipse(Point &p1,Point &p2);
    并在构造函数里输出“gouzao 2”和x1,y1,x2,y2的值。
    (8)修改Ellipse的析构函数的输出内容为“Ellipse xigou”以及待析构对象的外切矩形右下角的横纵坐标。
    (9)去掉Ellipse类的拷贝构造函数、Fun函数,并修改剩余函数里的错误。

    【输入形式】
    主函数:输入四个坐标点,用其初始化一个Ellipse对象e1。
    输入两对坐标点,用其初始化2个Point对象p1和p2。
    用p1和p2初始化一个新的Ellipse对象e2。
    最后调用e1和e2的Show函数分别显示坐标,调用e1和e2的Area函数计算并输出。

    【输出形式】
    程序运行结果

    【样例输入】
    -3 1 3 -1
    -3 2
    3 -2

    【样例输出】
    gouzao 1 -3 1 3 -1
    gouzao 2 -3 2 3 -2
    -3 1 3 -1
    -3 2 3 -2
    9.4245
    18.849
    Ellipse xigou 3 -2
    Point xigou 3 -2
    Point xigou -3 2
    Point xigou 3 -2
    Point xigou -3 2
    Ellipse xigou 3 -1
    Point xigou 3 -1
    Point xigou -3 1

    #include <iostream>
    #include <math.h>
    #include <iomanip>
    using namespace std;
    
    class Point
    {
    private:
        int p_x,p_y;
    public:
        //基本函数
        Point(int x=0,int y=0);//参数带默认值的构造函数
        Point(Point& p);//拷贝(复制)构造函数
        ~Point();//析构函数
        //功能函数
        int GetX(){return p_x;}//取横坐标值
        int GetY(){return p_y;}//取纵坐标值
    };
    
    Point::Point(int x,int y)//参数带默认值的构造函数
    {
        p_x = x; p_y = y;
    }
    
    Point::Point(Point& p)//拷贝(复制)构造函数
    {
        p_x = p.p_x; p_y = p.p_y;
    }
    
    Point::~Point()//析构函数
    {
        cout << "Point xigou " << p_x << " " << p_y << endl;
    }
    
    
    class Ellipse
    {
    private:
        Point a,b;
    public:
        //基础函数
        Ellipse(int xx1,int yy1,int xx2,int yy2);//构造函数
        Ellipse(Point &p1,Point &p2);//构造函数
        ~Ellipse();//析构函数
        //功能函数
        double Area();//计算椭圆面积
        int GetX1(){return a.GetX();}
        int GetY1(){return a.GetY();}
        int GetX2(){return b.GetX();}
        int GetY2(){return b.GetY();}
        void Show();//显示椭圆的外切矩形的顶点坐标
    };
    
    Ellipse::Ellipse(int xx1,int yy1,int xx2,int yy2):a(xx1,yy1),b(xx2,yy2)
    {
        cout << "gouzao 1 " << a.GetX() << " " << a.GetY() << " " << b.GetX() << " " << b.GetY() << endl;
    }
    
    Ellipse::Ellipse(Point &p1,Point &p2):a(p1),b(p2)//构造函数
    {
        cout << "gouzao 2 " << a.GetX() << " " << a.GetY() << " " << b.GetX() << " " << b.GetY() << endl;
    }
    
    Ellipse::~Ellipse()//析构函数
    {
        cout << "Ellipse xigou " << b.GetX() << " " << b.GetY() << endl;
    }
    
    double Ellipse::Area()
    {
        return (double)( 3.1415 * fabs(b.GetX()-a.GetX()) * fabs(b.GetY()-a.GetY()) / 4 );
    }
    
    void Ellipse::Show()//显示椭圆的外切矩形的顶点坐标
    {
        cout << a.GetX() << " " << a.GetY() << " " << b.GetX() << " " << b.GetY() << endl;
    }
    
    int main()
    {
        int x1,y1,x2,y2,x3,y3,x4,y4;
        cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
        Ellipse e1(x1,y1,x2,y2);
        Point p1(x3,y3);
        Point p2(x4,y4);
        Ellipse e2(p1,p2);
        e1.Show();
        e2.Show();
        cout << fixed << setprecision(4) << e1.Area() << endl;
        cout << fixed << setprecision(3) << e2.Area() << endl;
        return 0;
    }
    
    
  • 相关阅读:
    一些命令
    DB-5:使用PowerDesigner连接数据库并生成ER图
    [原创]OpenEuler20.03安装配置PostgreSQL13.4详细图文版
    oss 视频转码
    java lambda groupby 的map顺序问题
    Springboot得到RabbitMQ队列消息的数量
    Rabbitmq 定时任务 (代码实现)
    Rabbitmq 定时任务
    Mac navicat 15
    Mac 重置 idea
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626152.html
Copyright © 2011-2022 走看看