多边形周长计算(继承)

给出下面的多边形基类框架:

class polygon

{ protected:

   int number;//边数,最多不超过100条边
private:

   int side_length[100];//边长数组
public:

   polygon();//构造函数根据需要重载
   int perimeter();//计算多边形边长
   void display();//输出多边形边数和周长
}

建立一个派生类rectangle(矩形),增加以下数据成员:

  int height;
  int width;

增加以下成员函数:

 rectangle类的无参和参数化构造函数
 int perimeter();//计算矩形边长
 void display();//输出多边形边数和周长

建立一个派生类equal_polygon(等边多边形),增加以下数据成员:

  int side_len;

增加以下成员函数:

 rectangle类的无参和参数化构造函数
 int perimeter();//计算矩形边长
 void display();//输出多边形边数和周长

生成上述类并编写主函数,根据输入的多边形信息,相应建立一个多边形类对象或矩形类对象或等边多边形类对象,计算每一个多边形的周长并且输出其边数和周长。

输入格式: 测试输入包含一个测试用例,该测试用例的第一行输入多边形的个数n,接下来n行每一行给出一个多边形的基本信息,每行的第一个数字为当前多边形的类型,0为一般多边形,后面跟随m个数字为m条边的边长,-1为一般多边形边长输入结束标志,1为矩形,后面跟随两个数字,分别为height和width,2为等边多边形,后面跟随两个数字为等边多边形的边数和边长。

输入样例:

3

0 32 54 76 88 24 -1

1 32 54

2 3 32

输出样例:

5 274

4 172

3 96

#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std;
class polygon
{ 
protected:
	int number;
private:
	int side_length[100];
public:
	int all=0;
	polygon(){};
   polygon(int num,int x[])
   {
   		number=num;
   		int i;
   		for(i=1;i<=num;i++)
   		{
   			side_length[i]=x[i];
		}
   }
   int perimeter()
   {
   		int i;
   		for(i=1;i<=number;i++)
   		{
   			all+=side_length[i];
		}
		return all;
   }
   void display()
   {
		cout<<number<<" "<<all<<endl;
   }
};
class rectangle:public polygon
{
protected:
	int height;
  	int width;
public:
	rectangle(int h,int w)
	{
		number=4;height=h;width=w;
	}
 	int perimeter()
 	{
 		all=(height+width)*2;
 		return all;
	 }

};
class equal_polygon:public polygon
{
protected:
	int side_len;
public:
	equal_polygon(int num,int l)
	{
		number=num;side_len=l;
	}
 	int perimeter()
 	{
 		all=number*side_len;
 		return all;
	 }
};
int main()
{
	int flag;
	cin>>flag;
	for(int i=1;i<=flag;i++)
	{
		int n;
		cin>>n;
		if(n==0)
		{
			int x[100];
			int num=0;
			for(num=1;;num++)
			{
				cin>>x[num];
				if(x[num]==-1){break;}
			}
			polygon t(num-1,x);
			t.perimeter();t.display();
		}
		
		if(n==1)
		{
			int h,w;
			cin>>h>>w;
			rectangle t(h,w);
			t.perimeter();t.display();
		}
		
		if(n==2)
		{
			int num,l;
			cin>>num>>l;
			equal_polygon t(num,l);
			t.perimeter();t.display();
		}
		
	}
    return 0;
}

 

posted @ 2022-05-31 20:57  墨燃云  阅读(273)  评论(0编辑  收藏  举报