多态的应用之几何形体处理

来源:互联网 发布:lol钻石知乎 编辑:程序博客网 时间:2024/04/29 01:26

输入若干个几何形体的参数,要求按面积从小到大输出,并在输出中指明几何形体类型。

#include <iostream>#include <cstdlib>#include <cmath>using namespace std;class CShape{public:    virtual double Area()=0;  //存虚函数,无函数体    virtual void PrintInfo()=0;};class CRectangle:public CShape{public:    int w,h;    virtual double Area();    virtual void PrintInfo();};class CCircle:public CShape{public:    int r;    virtual double Area();    virtual void PrintInfo();};class CTriangle:public CShape{public:    int a,b,c;    virtual double Area();    virtual void PrintInfo();};double CRectangle::Area(){    return w*h;}void CRectangle::PrintInfo(){    cout<<"Rectangle:"<<Area()<<endl;}double CCircle::Area(){    return 3.14*r*r;}void CCircle::PrintInfo(){    cout<<"Circle:"<<Area()<<endl;}double CTriangle::Area(){    double p=(a+b+c)/2.0;    return sqrt(p*(p-a)*(p-b)*(p-c));}void CTriangle::PrintInfo(){    cout<<"Triangle:"<<Area()<<endl;}CShape* pShapes[100];int MyCompare(const void* s1,const void* s2);int MyCompare(const void* s1,const void* s2){    double a1,a2;    CShape** p1;  //s1,s2是void*,    CShape** p2;    p1=(CShape**)s1;  //s1,s2指向pShape数组中的元素,数组元素是CShape*,因此p1,p2是    p2=(CShape**)s2;  //指向指针的指针,CShape**    a1=(*p1)->Area();  //*p1的类型是CShape*,是基类的指针,因此是多态    a2=(*p2)->Area();    if(a1<a2)        return -1;    else if(a2<a1)        return 1;    else        return 0;}int main(){    int i,n;    CRectangle *pr; CCircle *pc;CTriangle *pt;    cin>>n;    for(i=0;i<n;i++)    {        char c;        cin>>c;        switch(c)        {        case 'R':            pr=new CRectangle();            cin>>pr->w>>pr->h;            pShapes[i]=pr;            break;        case 'C':            pc=new CCircle();            cin>>pc->r;            pShapes[i]=pc;            break;        case 'T':            pt=new CTriangle();            cin>>pt->a>>pt->b>>pt->c;            pShapes[i]=pt;            break;        }    }    qsort(pShapes,n,sizeof(CShape*),MyCompare);    for(i=0;i<n;i++)    {        pShapes[i]->PrintInfo();  //多态    }    return 0;}
输入样例:

输出样例:


案例来自北京大学网络课堂《C++程序设计》

0 0
原创粉丝点击