7-8 多边形周长计算(继承) (10 分)
给出下面的多边形基类框架:
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<string>
#include<iomanip>
#include <iostream>
using namespace std;
class polygon
{ protected:
int number;//边数,最多不超过100条边
private:
int side_length[100];//边长数组
public:
polygon(){
};
polygon(int num){
number=num;
};
void set(int a,int b){
side_length[a]=b;
}
//构造函数根据需要重载
int perimeter(){
int a=0;
for(int i=0;i<number;i++){
a+=side_length[i];
}
return a;
}//计算多边形边长
void display(){
printf("%d %d\n",number,this->perimeter());}//输出多边形边数和周长
};
class rectangle:public polygon{
int height;
int width;
public :
rectangle(){};
rectangle(int hei,int wid){
height=hei;width=wid;}
int perimeter(){
return 2*(width+height);
}//计算矩形边长
void display(){
printf("4 %d\n",2*(width+height));
}//输出多边形边数和周长
};
class equal_polygon:public polygon{
int side_len;
public :
equal_polygon(){
};
equal_polygon(int num,int side){
side_len=side;
number=num;
}
int perimeter(){
return number*side_len;
}//计算等边多边形边长
void display(){
printf("%d %d\n",number,number*side_len);}//输出多边形边数和周长
};
int main()
{
int n;
scanf("%d",&n);
int a;int array[100];
for(int i=0;i<n;i++){
scanf("%d",&a);
if(a==0){
int b;
scanf("%d",&b);int count=0;//计数器
while(b!=-1){
array[count++]=b;
scanf("%d",&b);
}
polygon p(count);
for(int j=0;j<count;j++){
p.set(j,array[j]);
}
p.display();
}
if(a==1){
int width,height;
scanf("%d %d",&width,&height);
rectangle r(height,width);
r.display();
}
if(a==2){
int number,len;
scanf("%d %d",&number,&len);
equal_polygon e(number,len);
e.display();
}
}
return 0;
}
一开始过不去的原因是在for循环的计数器选择了i而不是count导致变量重名,以后要多多注意。