1、題目:
給出下面的多邊形基類框架:
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
2、代碼:
#include<iostream>
using namespace std;
class polygon
{
protected:
int number;
private:
int side_length[100];
public:
polygon() {};
polygon(int num)
{
number=num;
}
void set(int len[])
{
for(int i=0; i<number; i++)
{
side_length[i]=len[i];
}
}
int perimeter()
{
int ans=0;
for(int i=0; i<number; i++)
{
ans+=side_length[i];
}
return ans;
}
void display()
{
cout<<number<<" "<<perimeter()<<endl;
}
};
class rectangle:public polygon
{
private:
int height;
int width;
public:
rectangle(int num,int a,int b):polygon(num)
{
height=a;
width=b;
}
int perimeter1()
{
int l=0;
l=height+width;
l*=2;
return l;
}
void display1()
{
cout<<"4 "<<perimeter1()<<endl;
}
};
class equal_polygon:public polygon
{
private:
int side_len;
public:
equal_polygon(int num,int side):polygon(num)
{
side_len=side;
}
int perimeter2()
{
int le=0;
le=side_len*number;
return le;
}
void display2()
{
cout<<number<<" "<<perimeter2()<<endl;
}
};
int main()
{
int n;
cin>>n;
int ch;
for(int i=0; i<n; i++)
{
cin>>ch;
int o=1;
if(ch==0)
{
int a[100];
int j=0;
while(cin>>a[j])
{
if(a[j]==-1)
{
break;
}
j++;
}
polygon po(j);
po.set(a);
po.perimeter();
po.display();
}
if(ch==1)
{
int a,b;
cin>>a>>b;
rectangle re(4,a,b);
re.perimeter1();
re.display1();
}
if(ch==2)
{
int nu,side_l;
cin>>nu>>side_l;
equal_polygon equal(nu,side_l);
equal.perimeter2();
equal.display2();
}
}
return 0;
}