多态和继承(3)

本文通过一个多边形基类及其派生类矩形和等边多边形的实例,展示了多态和继承的概念。基类包含边数和边长数组,派生类矩形增加了高度和宽度,等边多边形增加了边长。程序根据输入创建相应的对象并计算周长,输出边数和周长。输入格式包括多边形类型和边长信息,输出样例给出了不同类型的多边形周长和边数。

给出下面的多边形基类框架:
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;
增加以下成员函数:
equal_polygon类的无参和参数化构造函数
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<string>
using namespace std;
class polygon{
protected:
	int number;
private:
	int side_length[100];
public:
	polygon();
	polygon(int num,int *len);
	int perimeter();
	void display();
};
polygon::polygon(){
	
	number=0;
	memset(side_length,0,sizeof(side_length));
	
}
polygon::polygon(int num,int *len){
	int i;
	number=num;
	for(i=0;i<num;i++)
		side_length[i]=len[i];
}
int polygon::perimeter(){
	int i,sum=0;
	for(i=0;i<number;i++){
		sum+=side_length[i];

	}
	return sum;
}
void polygon::display(){
	cout<<number<<" "<<perimeter()<<endl;
}



class rectangle:public polygon{
private:
	int height;
	int width;
public:
	rectangle();
	rectangle(int h,int w):polygon(){
		number=4;
		height=h;
		width=w;
	}
	int perimeter();
	void display();
};

rectangle::rectangle(){
	height=0;
	width=0;
}
int rectangle::perimeter(){
	int sum;
	sum=2*height+2*width;
	return sum;
}
void rectangle::display(){
	cout<<"4"<<" "<<perimeter()<<endl;
}


class equal_polygon:public polygon{
private:
	int side_len;
public:
	equal_polygon();
	equal_polygon(int num,int sl):polygon(){
		side_len=sl;
		number=num;
	}
	int perimeter();
	void display();
};
equal_polygon::equal_polygon(){
	side_len=0;
}
int equal_polygon::perimeter(){
	return number*side_len;
}
void equal_polygon::display(){
	cout<<number<<" "<<perimeter()<<endl;
}
int main(){
	int n,type,bc,count,h,w,a[100]={0};
	cin>>n;
	while(n--){
		cin>>type;
		if(type==1){
			cin>>h>>w;
			rectangle r(h,w);
			r.display();
		}
		if(type==2){
			cin>>h>>w;
			equal_polygon e(h,w);
			e.display();
		}
		if(type==0){
			count=0;
			while(cin>>bc&&bc!=-1){
				a[count++]=bc;
			}
			polygon p(count,a);
			p.display();
		}
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值