13.3 立体类族共有的抽象类

来源:互联网 发布:十月革命 知乎 编辑:程序博客网 时间:2024/06/14 04:55
//姓名:李晓凡//时间:2015.6.6//  设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。//设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。//在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)//要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。#include<iostream>using namespace std;class CSolid{public:    virtual double Area()=0;    virtual double V()=0;    double P=3.1415926;};class CCube:public CSolid{protected:    double R;public:    CCube(double r=0):R(r){}    virtual double Area();    virtual double V() ;};class CBall:public CSolid{protected:    double r;public:    CBall(double R=0):r(R){}    virtual double Area();    virtual double V();};class CCylinder:public CSolid{protected:    double r;    double h;public:    CCylinder(double R=0,double H=0):r(R),h(H){}    virtual double Area();    virtual double V();};double CCube::Area(){    return 6*R*R;}double CCube::V(){    return R*R*R;}double CBall::Area(){    double n;    n=4*P*r*r;    return n;}double CBall::V(){    double  n;    n=(4*P*r*r*r)/3;    return n;}double CCylinder::Area(){    return 2*P*r*(r+h);}double CCylinder::V(){    return P*r*r*h;}int main(){    CSolid *p;    double s,v;    CCube x(30.0);    cout<<"立方体边长为 30 "<<endl;    p=&x;    s=p->Area( );    v=p->V( );    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    CBall y(4.5);    cout<<"球体半径为 4.5 "<<endl;    p=&y;    s=p->Area( );    v=p->V( );    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    CCylinder z(10,20);    cout<<"圆柱体底面半径、高分别为 10, 20"<<endl;    p=&z;    s=p->Area( );    v=p->V( );    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    return 0;}

0 0