第十三周项目六 立体类族共有的抽象类

/*copyright(c)2016.烟台大学计算机学院
 * All rights reserved,
 * 文件名称:text.Cpp
 * 作者:舒文超
 * 完成日期:2016年5月22日
 * 版本号:vc++6.0
 * 问题描述:设计一个抽象类CSolid,含有用于求表面积
            及体积的两个纯虚函数。设计派生类CCube、
            CBall、CCylinder,分别表示正方体、球体
            及圆柱体。在main()函数中,定义CSolid *p;
            (p是指向基类的指针,且这个基类是个抽象类)。
            要求利用这个p指针,能够求出正方体、球体及圆
            柱体对象的表面积及体积。
 */
#include<iostream>
#define Pi 3.1415926
using namespace std;
class CSolid
{
public:
    virtual double get_area() const=0;
    virtual double get_volum() const=0;
};
class CCube:public CSolid
{
private:
    double height;
    double weight;
    double longth;
public:
    CCube(double h,double w,double l):height(h),weight(w),longth(l){}
    virtual double get_area() const
    {
        return 2*(height*weight+longth*height+longth*weight);
    }
    virtual double get_volum() const
    {
        return height*weight*longth;
    }
};
class CBall:public CSolid
{
private:
    double R;
public:
    CBall(double r):R(r){}
    virtual double get_area() const
    {
        return 4*Pi*R*R;
    }
    virtual double get_volum() const
    {
        return (4/3.0)*Pi*R*R*R;
    }
};
class CCylinder:public CSolid
{
private:
    double R;
    double height;
public:
    CCylinder(double r,double h):R(r),height(h){}
    virtual double get_area() const
    {
        return Pi*R*R*2.0+(2.0*Pi*R*height);
    }
    virtual double get_volum() const
    {
        return Pi*R*R*height;
    }
};
int main()
{
    double a,b,c;
    double s,v;
    cout<<"请输入长方体的长宽高"<<endl;
    cout<<"longth:";
    cin>>a;
    cout<<"weight:";
    cin>>b;
    cout<<"height:";
    cin>>c;
    CCube C1(c,b,a);
    cout<<"请输入球体的半径"<<endl;
    cout<<"R:";
    cin>>a;
    CBall C2(a);
    cout<<"请输入圆柱的底面半径和高"<<endl;
    cout<<"R:";
    cin>>a;
    cout<<"height:";
    cin>>b;
    CCylinder C3(a,b);
    CSolid *p[3]= {&C1,&C2,&C1}; //定义基类指针数组p,使它每一个元素指向一个派生类对象
    for(int i=0; i<6; i++)
    {
        s=p[i]->get_area();
        v=p[i]->get_volum();
        cout<<"表面积为:"<<s<<endl;
        cout<<"体积为:"<<v<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值