立方体类组中的纯虚函数类

来源:互联网 发布:智能推荐系统书籍 知乎 编辑:程序博客网 时间:2024/06/04 23:49
/** Copyright (c) 2013, 烟台大学计算机学院* All rights reserved.* 文件名称:test.cpp* 作者:邱学伟* 完成日期:2013 年 6 月 2 日* 版本号:v1.0* 输入描述:无* 问题描述:* 程序输出:* 问题分析:* 算法设计:略*//*设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。*/#include <iostream>using namespace std;class CSolid    //基类{    public:    virtual double area() const =0;    //纯虚函数,求面积    virtual double volume() const =0;   //纯虚函数,求体积};class CCube:public CSolid  //正方体{    public:    CCube(double w):width(w){}    virtual double area() const   //正方体的表面积    {        return 6*width*width;    }    virtual double volume() const  //正方体的体积    {        return width*width*width;    }    private:    double width;};class CBall:public CSolid  //球体{    public:    CBall(double r0):r(r0){}    virtual double area() const  //球体的表面积    {        return 4*3.14*r*r;    }    virtual double volume() const  //球体的体积    {        return (4*3.14*r*r*r)/3;    }    private:    double r;};class CCylinder:public CSolid{    public:    CCylinder(double r0,double h):r(r0),height(h){}    virtual double area() const    {        return 2*(3.14*r*r)+height*3.14*r*2;    }    virtual double volume() const    {        return height*3.14*r*r;    }    private:    double r,height;};int main(){    CSolid *p;    double s,v;    CCube c1(30);    p=&c1;    s=p->area();    v=p->volume();    cout<<"边长为30的正方体表面积为:"<<s<<endl;    cout<<"边长为30的正方体的体积为:"<<v<<endl;    CBall c2(5);    p=&c2;    s=p->area();    v=p->volume();    cout<<"半径为5的球的表面积为:"<<s<<endl;    cout<<"半径为5的球的体积为:"<<v<<endl;    CCylinder c3(5,4);    p=&c3;    s=p->area();    v=p->volume();    cout<<"半径为5,高为4的圆柱的表面积为:"<<s<<endl;    cout<<"半径为5,高为4的圆柱的体积为:"<<v<<endl;}