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

来源:互联网 发布:淘宝店铺标志源码 编辑:程序博客网 时间:2024/05/16 09:32
项目3-立体类族共有的抽象类】

    设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。

/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:d.cpp*作    者:张旺华*完成日期:2015年5月27日*版 本 号:v1.0*/#include <iostream>#include <cmath>using namespace std;class CSolid{public:    virtual double area()const=0;    virtual double Volume() const=0;};class CCube :public CSolid{private:    double a;public:    CCube(double n):a(n) {}    double area()const;    double Volume() const;};double CCube::area()const{    return a*a*6;}double CCube::Volume() const{    return a*a*a;}class CBall :public CSolid{private:    double a;public:   CBall(double n):a(n){}    double area()const;    double Volume() const;};double CBall::area()const{    return 4*3.14159*a*a;}double CBall::Volume() const{    return 3.14159*a*a*a*4/3;}class CCylinder :public CSolid{private:    double a,b;public:    CCylinder(double m,double n):a(m),b(n) {}    double area()const;    double Volume() const;};double CCylinder::area()const{    return 3.14159*a*a+3.14159*2*a*b;}double CCylinder::Volume() const{    return 3.14159*a*a*b;}int main( ){    CSolid *p;    double s,v;    CCube x(30);    cout<<"立方体边长为 30 "<<endl;    p=&x;    s=p->area( );    v=p->Volume( );    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    CBall y(4.5);    cout<<"球体半径为 4.5 "<<endl;    p=&y;    s=p->area( );    v=p->Volume( );    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    CCylinder z(10,20);    cout<<"圆柱体底面半径、高分别为 10, 20"<<endl;    p=&z;    s=p->area( );    v=p->Volume( );    cout<<"表面积:"<<s<<endl;    cout<<"体积:"<<v<<endl;    cout<<endl;    return 0;}

运行结果:


知识点应用及心得:

在使用抽象类后体现指针的优点,如:

p=&x;
    s=p->area( );
    v=p->Volume( );

简化了步骤与代码。

0 0
原创粉丝点击