#include <iostream>
using namespace std;
class Shape
{
private:
public:
virtual~Shape() {}
virtual double Area()=0;
virtual void Show()=0;
friend bool operator==(Shape&A,Shape&B)
{
return A.Area()==B.Area();
}
friend bool operator>(Shape&A,Shape&B)
{
return A.Area()>B.Area();
}
friend bool operator<(Shape&A,Shape&B)
{
return A.Area()<B.Area();
}
protected:
double area;
};
class Rectangle:public Shape
{
private:
public:
Rectangle(double width,double height):area(width*height),rectWidth(width),rectHeight(height) {}
double Area()
{
return area;
}
void Show()
{
cout<<"W: "<<rectWidth<<"; H:"<<rectHeight<<"; Area: "<<Area()<<endl;
}
protected:
double Shape::area;
double rectWidth,rectHeight;
};
class Ellipse:public Shape
{
private:
static const double PI=3.1415926;
public:
Ellipse(double width,double height):area(width*height/4*PI),rectWidth(width),rectHeight(height)
{
}
double Area()
{
return area;
}
void Show()
{
cout<<"W: "<<rectWidth<<"; H:"<<rectHeight<<"; Area: "<<Area()<<endl;
}
protected:
double Shape::area;
double rectWidth,rectHeight;
};
int split(Shape*p[],int l,int h)
{
Shape*t=p[l];
while(l<h)
if(p[h]->Area()>t->Area())
{
p[l++]=p[h];
while(l<h)
if(t->Area()>p[l]->Area())
{
p[h--]=p[l];
break;
}
else l++;
}
else h--;
p[h]=t;
return h;
}
void Sort(Shape*p[],int l,int h)
{
if(l<h)
{
int m=split(p,l,h);
Sort(p,l,m-1);
Sort(p,m+1,h);
}
}
int main()
{
int n;
double w,h;
Rectangle t(w,h);
char ShapeType;
cin >> n;
Shape*p[n];
for(int i=0; i<n; ++i)
{
cin >> ShapeType >> w >> h;
if(ShapeType=='R') p[i]=new Rectangle(w,h);
else p[i]=new Ellipse(w,h);
}
//排序前
for(int i=0; i<n; ++i)
p[i]->Show();
//面积相等
for(int i=0; i<n; ++i)
{
for(int j=i+1; j<n; ++j)
{
if(p[i]->Area()==p[j]->Area())
cout << "Area of Shape[" <<i<< "] is equal to Shape[" <<j<< "]" <<endl;
}
}
Sort(p,0,n-1);
//排序后
for(int i=0; i<n; ++i)
p[i]->Show();
for(int i=0; i<n; ++i)
delete p[i];
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
cpp.rar_cpp定义_mirrorqfu_show
共1个文件
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 11 浏览量
2022-09-20
21:02:57
上传
评论
收藏 885B RAR 举报
温馨提示
定义表示形状的抽象类及相应的派生类,并实现相关操作符重载。 (1)定义表示形状的抽象类Shape: 添加公有成员函数double Area(),用于计算形状面积;定义为纯虚函数; 添加公有成员函数void Show(),用于显示形状信息,定义为纯虚函数; 定义虚的析构函数; 重载比较操作符:==、>和<,用于比较两个形状面积的大小关系,返回值类型为bool,可以定义为成员函数或友元函数。 (2)从形状类Shape派生矩形类Rectangle: 添加double型的保护数据成员:rectWidth和rectHeight,分别表示矩形的宽度和高度; 定义带参构造函数; 重定义公有成员函数Show,打印矩形的宽度和高度,输出格式为“W: 宽度 H: 高度 Area: 面积”; 重定义公有成员函数Area,计算矩形面积。 (3)从形状类Shape派生椭圆类Ellipse: 添加double型的保护数据成员:rectWidth和rectHeight,分别表示椭圆外接矩形的宽度和高度; 定义带参构造函数; 重定义公有成员函数Show,打印椭圆外接矩形的宽度和高度,输出格式为“W: 宽度 H: 高度 Area: 面积”; 重定义公有成员函数Area,计算椭圆面积。
资源详情
资源评论
资源推荐
收起资源包目录
cpp.rar (1个子文件)
cpp.txt 3KB
共 1 条
- 1
APei
- 粉丝: 81
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0