椭圆类——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;
}

原文地址:https://www.cnblogs.com/yuzilan/p/10626152.html