问题 I: oop实习-9.抽象类与运算符重载

在这里插入图片描述

代码如下

#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;

class Shape{
	public:
		virtual double area() = 0;
		virtual void Show() = 0;
        virtual ~Shape() { }
}; 

class R:public Shape{
	protected:
		double rw;
		double rh;
	public:
	    R(double i,double j):rw(i),rh(j) {}	
        void Show();
        double area();
        ~R() { }
};

class E:public Shape{
	protected:
		double rw,rh;
	public:
		E(double i,double j):rw(i),rh(j) { }
		void Show();
		double area();
		~E() { }
};
void R::Show() 
{
	cout<<"W: "<<rw<<"; H:"<<rh<<"; Area: "<<area()<<endl;
}

void E::Show() 
{
	cout<<"W: "<<rw<<"; H:"<<rh<<"; Area: "<<area()<<endl;
}

double R::area()
{
	return rw*rh;
}

double E::area() 
{
	return 0.25*3.1415926*rw*rh;
}

void f(Shape *r)
{
	r->Show();
}

double g(Shape *r)
{
	return r->area() ;
}

void swap(Shape **a,int i,int j)
{
	
	Shape *p=a[i];
	a[i]=a[j];
	a[j]=p;

}
int main()
{
	int n,i,j,k;
	char ch;
	cin>>n;
	Shape *a[n];
	for(i = 0;i < n;i++)
	{
		cin>>ch>>j>>k;
		if(ch == 'R')
		{
			 a[i] = new R(j,k); 
		}
		else if(ch == 'E')
		{
			 a[i] = new E(j,k);
		}
		f(a[i]);
	}//输入部分
	for(i = 0;i < n - 1;i++)
	{
		for(j = i + 1;j < n;j++)
		{
			if(fabs(g(a[i]) - g(a[j])) < 1e-6)
			cout<<"Area of Shape["<<i<<"] is equal to Shape["<<j<<"]"<<endl;
		}
	}//输出相同的
	for(i = 0;i < n-1;i++)
	{
		for(j = 0;j < n - 1 - i;j++)
		{
			if(g(a[j])<g(a[j+1]))
			{
				Shape *p=a[j];
				a[j]=a[j+1];
				a[j+1]=p;
			}
		}
	}//排序
		for(i = 0;i<n-1;i++)
	{
		if(fabs(g(a[i]) - g(a[i+1])) < 1e-6)
		{
			swap(a,i,i+1);
		}
	}//调整结果
	for(i = 0;i < n;i++)
	{
		f(a[i]);
	}//输出结果
	for(i = 0;i < n;i++)
	delete a[i];
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值