#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*/
多态——虚函数
最新推荐文章于 2022-10-25 16:29:05 发布