10.4抽象类

/*
* 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.14
using 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;
}

你可能感兴趣的:(类)