立体类族共有的抽象类

来源:互联网 发布:三省六部 知乎 编辑:程序博客网 时间:2024/05/16 13:43
////  main.cpp//  project////  Created by 徐伟 on 6/5/16.//  Copyright © 2016 fizz_i. All rights reserved.///*  设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(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 a=0):a(a){}    double area()const;    double volume()const;private:    double a;};double CCube::area()const{    return a*a*6;}double CCube::volume()const{    return a*a*a;}class CBall:public CSolid{public:    CBall(double r=0):r(r){}    double area()const;    double volume()const;private:    double r;};double CBall::area()const{    return 4*3.1415926*r*r;}double CBall::volume()const{    return 4*3.1415926*r*r*r/3;}class CCylinder:public CCube{public:    CCylinder(double r=0,double h=0):r(r),h(h){}    double area()const;    double volume()const;private:    double r;    double h;};double CCylinder::area()const{    return 2*3.1415926*r*h+3.1415926*r*r;}double CCylinder::volume()const{    return 3.1415926*r*r*h;}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;}

0 0
原创粉丝点击