java创作一个椭圆类_椭圆类——3 (类的复杂设计)

本文详细介绍了如何在Java中创建一个椭圆类(Ellipse)和点类(Point),包括它们的构造函数、拷贝构造函数、析构函数、获取坐标的方法以及椭圆的面积计算。此外,还演示了如何使用主函数输入坐标点来初始化和操作这些对象。
摘要由CSDN通过智能技术生成

【问题描述】

(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

#include

#include

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值