给出下面的多边形基类框架:
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;
}
本文通过一个多边形基类及其派生类矩形和等边多边形的实例,展示了多态和继承的概念。基类包含边数和边长数组,派生类矩形增加了高度和宽度,等边多边形增加了边长。程序根据输入创建相应的对象并计算周长,输出边数和周长。输入格式包括多边形类型和边长信息,输出样例给出了不同类型的多边形周长和边数。
&spm=1001.2101.3001.5002&articleId=9069203&d=1&t=3&u=bbf8f47ed5c94e1cb79c1a3218cb5f2e)
1960

被折叠的 条评论
为什么被折叠?



