【VC小项目】-13.3立体类族共有的抽象类
2016-06-30 10:25
176 查看
要求:
设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
解答:
设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
解答:
#include "iostream" using namespace std; const double pai=3.1415926; // 抽象立体图形基类 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; }输出:
相关文章推荐
- VB6.0新手入门代码 用VB打开文件夹
- VB6.0新手入门代码 用VB打开文件
- servlet request getHeader("x-forwarded-for") 获取真实IP
- Linux errno 错误对照表
- 神经网络入门(连载之三)
- CentOS yum安装Apache + PHP + Tomcat7 + MySQL
- Reason: Failed while changing version of java to 1.7
- 神经网络入门(连载之二)
- dos环境搭建
- Android在屏幕适配时出现异常java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x1
- c# winform 显示动态gif图片的方法
- 347. Top K frequent element
- 二叉树的非递归遍历的解析与实现----java实现
- 神经网络入门(连载之一)
- html5 input type=datetime-local 无法赋值问题
- UI坐标系转换
- 常见类的基本使用
- VB6.0新手入门代码 用VB获取当前的年月日
- Java编程中“为了性能”尽量要做到的一些地方
- jquery动态生成html代码 怎么 获取id 或 class