立体类族共有的抽象类

来源:互联网 发布:ssm 怎么打印sql 编辑:程序博客网 时间:2024/05/22 12:38
/* Copyright (c) 2016* All rights reserved 烟台大学计算机与控制工程学院* 文件名称:3.cpp* 作者:刘丽* 完成日期:2016年 6 月 15日* 版本号: v1.0【项目-立体类族共有的抽象类】    设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。*/#include<iostream>#include<cstring>#define PI 3.1415926using namespace std;class CSolid{public:    virtual double area()=0;    virtual double volume()=0;};class CCube:public CSolid{protected:    double l;    double h;    double w;public:    CCube(double w,double l,double h):w(w),l(l),h(h){};    double area();    double volume();};class CBall:public CSolid{protected:    double r;public:    CBall(double r):r(r){};    double area();    double volume();};class CCylinder:public CSolid{protected:    double r;    double l;    double h;public:    CCylinder(double r,double l,double h):r(r),l(l),h(h){};    double area();    double volume();};double CCube:: area(){    return 2*(w*l+w*h+l*h);}double CCube::volume(){    return w*l*h;}double CBall:: area(){    return 4*PI*r*r;}double CBall::volume(){    return 4/3*PI*r*r*r;}double CCylinder:: area(){    return PI*r*r+l*h;}double CCylinder::volume(){    return 0.5*PI*r*r*h;}int main(){    CSolid *p;    CCube r1(1,2,3);    CBall r2(2);    CCylinder r3(1,2,3);    p=&r1;    cout<<"area="<<p->area()<<endl;    cout<<"volume="<<p->volume()<<endl;     p=&r2;    cout<<"area="<<p->area()<<endl;    cout<<"volume="<<p->volume()<<endl;     p=&r3;    cout<<"area="<<p->area()<<endl;    cout<<"volume="<<p->volume()<<endl;    return 0;}

0 0