10.4抽象类

来源:互联网 发布:gs4 rx5 知乎 编辑:程序博客网 时间:2024/05/16 11:03
/** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 作    者:王颖* 完成日期:2014 年 5 月 28 日* 版 本 号:v1.0* 输入描述: 无* 问题描述:设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。* 程序输出:略* 问题分析:略* 算法设计:略*/#include <iostream>#include <iomanip>#define pi 3.14using namespace std;class CSolid{   public:    virtual float superficial() =0;    virtual float volume() =0;};class CCube:public CSolid{    public:    CCube(float a1):a(a1){}    virtual float superficial()    {        return 8*a*a;    }    virtual float volume()    {        return a*a*a;    }    private:    float a;};class CBall:public CSolid{    public:    CBall(float r1):r(r1){}    virtual float superficial()    {        return 4*pi*r*r;    }    virtual float volume()    {        return (3/4)*pi*r*r*r;    }    private:    float r;};class cylinder:public CSolid{  public:  cylinder(float h1,float r1):h(h1),r(r1){}  virtual float superficial()  {      return (2*pi*r*h+2*2*pi*r);  }    virtual float volume()    {        return pi*r*r*h;    }    private:    float h,r;};int main(){    cout<<fixed<<setprecision(2);    cylinder cylinder(2.1,5.1);    CCube CCube(2);    CBall CBall(3);    CSolid *pt;    pt=&CCube;    cout<<"正方体表面积:"<<pt->superficial()<<endl;    cout<<"体积:"<<pt->volume()<<endl;    pt=&CBall;    cout<<"球体表面积:"<<pt->superficial()<<endl;    cout<<"体积:"<<pt->volume()<<endl;    pt=&cylinder;    cout<<"圆柱体表面积:"<<pt->superficial()<<endl;    cout<<"体积:"<<pt->volume()<<endl;    return 0;}

0 0