14-3立体类族共有的抽象类

来源:互联网 发布:淘宝能看买家退货率吗 编辑:程序博客网 时间:2024/06/05 14:23
/* Copyright (c) 2012, 烟台大学计算机学院* All rights reserved.* 文件名称:text.cpp* 作    者:  胡颖*完成日期:2013年6月4日* 版 本 号:v1.0** 输入描述:无* 问题描述:设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。* 程序输出:输出定义的几个立体的体积和表面积* 问题分析:无* 算法设计:略*/#include <iostream>using namespace std;//抽象类CSolidclass CSolid{public:    virtual double surfaceArea() const =0;//表面积的纯虚函数    virtual double volume() const =0;//体积的纯虚函数};//派生CCube(正方体)类class CCube:public CSolid{public:    CCube(double len):length(len) {}    virtual double surfaceArea() const    {        return 6*length*length;    }    virtual double volume() const    {        return length*length*length;    }private:    double length;};//派生CBall(球体)类class CBall:public CSolid{public:    CBall(double r):radius(r) {}    virtual double surfaceArea() const    {        return 4*3.1415926*radius*radius;    }    virtual double volume() const    {        return (4/3)*3.1415926*radius*radius*radius;    }private:    double radius;};//派生CCylinder(圆柱体)类class CCylinder:public CSolid{public:    CCylinder(double r,double h):radius(r),height(h) {}    virtual double surfaceArea() const    {        return 2*3.1415926*radius*radius+2*3.1415926*radius*height;    }    virtual double volume() const    {        return 3.1415926*radius*radius*height;    }private:    double radius;    double height;};int main(){    CSolid *p;    double s,v;    //输出正方体表面积及体积    CCube x(30);    cout<<"正方体边长为30:"<<endl;    p=&x;    s=p->surfaceArea();    v=p->volume();    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    //输出球体表面积及体积    CBall y(4.5);    cout<<"球体半径为4.5:"<<endl;    p=&y;    s=p->surfaceArea();    v=p->volume();    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    //输出圆柱体的表面积及体积    CCylinder z(10,20);    cout<<"圆柱体半径为10,高为20:"<<endl;    p=&z;    s=p->surfaceArea();    v=p->volume();    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    return 0;}

运行结果: