C++走向远洋——60(项目四、立体类族共有的抽象类)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhello * 完成日期:2016年6月1日 * 版本号:V1.0 * 问题描述: 设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。 * 程序输入:无 * 程序输出:见运行结果 */ #include<iostream> using namespace std; const double pai=3.1415; class Csolid { public: virtual double SurfaceArea() const=0; virtual double Volume()const=0; }; class CCube:public Csolid { public: CCube(double len=0); double SurfaceArea()const; double Volume()const; private: double length; }; CCube::CCube(double len) { length=len; } double CCube::SurfaceArea()const { double c; c=6*length*length; return c; } double CCube::Volume()const { double c; c=length*length*length; return c; } class CBall:public Csolid { private: double radius; public: CBall(double r=0); double SurfaceArea()const; double Volume()const; }; CBall::CBall(double r) { radius=r; } double CBall::SurfaceArea()const { double c; c=4*pai*radius*radius; return c; } double CBall::Volume()const { double c; c=pai*radius*radius*radius*4/3; return c; } class CCylinder:public Csolid { private: double radius; double height; public: CCylinder(double r=0,double high=0); double SurfaceArea()const; double Volume()const; }; CCylinder::CCylinder(double r,double high) { radius=r; height=high; } double CCylinder::SurfaceArea() const { double c; c=2*pai*radius*radius+2*pai*radius*height; return c; } double CCylinder::Volume() const { double c; c=pai*radius*radius*height; return c; } int main( ) { Csolid *p; double s,v; CCube x(30); cout<<"立方体边长为 30 "<<endl; p=&x; s=p->SurfaceArea( ); v=p->Volume( ); cout<<"表面积:"<<s<<endl; cout<<"体积:"<<v<<endl; cout<<endl; CBall y(4.5); cout<<"球体半径为 4.5 "<<endl; p=&y; s=p->SurfaceArea( ); v=p->Volume( ); cout<<"表面积:"<<s<<endl; cout<<"体积:"<<v<<endl; cout<<endl; CCylinder z(10,20); cout<<"圆柱体底面半径、高分别为 10, 20"<<endl; p=&z; s=p->SurfaceArea( ); v=p->Volume( ); cout<<"表面积:"<<s<<endl; cout<<"体积:"<<v<<endl; cout<<endl; return 0; }
运行结果: