多态——虚函数

#include<iostream>
using namespace std;
class polygon{
protected:
	int number;
private:
	int side_length[100];
public:
	polygon();
	polygon(int nu):number(nu){}
	polygon(int nu,int *si);
	virtual int perimeter();
	virtual void display();
};
polygon::polygon(){
	number=0;
	memset(side_length,0,sizeof(side_length));
}
polygon::polygon(int nu,int *si){
	int i;
	number=nu;
	for(i=0;i<nu;i++)
		side_length[i]=si[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<<" polygon "<<this->perimeter()<<endl;
}

class rectangle:public polygon{
private:
	int height;
	int width;
public:
	rectangle(int he,int wi):height(he),width(wi){}
	rectangle():height(0),width(0){}
	int perimeter();
	void display();
};
int rectangle::perimeter(){
	return 2*(height+width);
}
void rectangle::display(){
	cout<<"4 rectangle "<<this->perimeter()<<endl;
}

class equal_polygon:public polygon{
protected:	
	int side_len;
public:
	equal_polygon(int nu,int si):polygon(nu),side_len(si){}
	equal_polygon():side_len(0){}
	int perimeter();
	void display();
};
int equal_polygon::perimeter(){
	return number*side_len;
}
void equal_polygon::display(){
	cout<<number<<" equal_polygon "<<this->perimeter()<<endl;
}

int main(){
	polygon *pt2poly[10];
	int n,i,ty,count,len1[100],len,end=0,he,wi,nu;
	cin>>n;
	for(i=0;i<n;i++){
		memset(len1,0,sizeof(len1));
		count=0;
		cin>>ty;
		if(ty==0){
			while(cin>>len&&len!=-1){
				len1[count++]=len;
			}
			pt2poly[i]=new polygon(count,len1);
		}
		if(ty==1){
			cin>>he>>wi;
			pt2poly[i]=new rectangle(he,wi);
		}
		if(ty==2){
			cin>>nu>>len;
			pt2poly[i]=new equal_polygon(nu,len);
		}

	}
	for(i=0;i<n;i++)
		pt2poly[i]->display();
	return 0;
}
/*给出下面的多边形基类框架:
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();//输出多边形边数和周长
生成上述类并编写主函数,要求主函数有一个基类polygon指针数组 pt2poly,数组元素不超过10个 
      polygon *pt2poly[10]; 
主函数根据输入的多边形信息,相应建立一个多边形类对象或矩形类对象或等边多边形类对象,并且取址按序赋给基类指针数组元素,最后遍历基类polygon指针数组 pt2poly,计算每一个多边形的周长并且输出其边数、多边形类型(polygon、rectangle、equal_rectangle三者之一)和周长。
输入格式: 测试输入包含一个测试用例,该测试用例的第一行输入多边形的个数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 polygon 274
4 rectangle 172
3 equal_polygon 96*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值