多态——虚函数

来源:互联网 发布:干支纪日法简便算法 编辑:程序博客网 时间:2024/06/06 17:38
#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为等边多边形,后面跟随两个数字为等边多边形的边数和边长。提示:应用虚函数实现多态输入样例:30 32 54 76 88 24 -11 32 542 3 32输出样例:5 polygon 2744 rectangle 1723 equal_polygon 96*/