多态和继承(3)

来源:互联网 发布:淘宝饰品店装修图 编辑:程序博客网 时间:2024/06/07 04:05

给出下面的多边形基类框架:
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;}


 

原创粉丝点击