/*copyright(c)2016.烟台大学计算机学院
* All rights reserved,
* 文件名称:text.Cpp
* 作者:舒文超
* 完成日期:2016年5月22日
* 版本号:vc++6.0
* 问题描述:设计一个抽象类CSolid,含有用于求表面积
及体积的两个纯虚函数。设计派生类CCube、
CBall、CCylinder,分别表示正方体、球体
及圆柱体。在main()函数中,定义CSolid *p;
(p是指向基类的指针,且这个基类是个抽象类)。
要求利用这个p指针,能够求出正方体、球体及圆
柱体对象的表面积及体积。
*/
#include<iostream>
#define Pi 3.1415926
using namespace std;
class CSolid
{
public:
virtual double get_area() const=0;
virtual double get_volum() const=0;
};
class CCube:public CSolid
{
private:
double height;
double weight;
double longth;
public:
CCube(double h,double w,double l):height(h),weight(w),longth(l){}
virtual double get_area() const
{
return 2*(height*weight+longth*height+longth*weight);
}
virtual double get_volum() const
{
return height*weight*longth;
}
};
class CBall:public CSolid
{
private:
double R;
public:
CBall(double r):R(r){}
virtual double get_area() const
{
return 4*Pi*R*R;
}
virtual double get_volum() const
{
return (4/3.0)*Pi*R*R*R;
}
};
class CCylinder:public CSolid
{
private:
double R;
double height;
public:
CCylinder(double r,double h):R(r),height(h){}
virtual double get_area() const
{
return Pi*R*R*2.0+(2.0*Pi*R*height);
}
virtual double get_volum() const
{
return Pi*R*R*height;
}
};
int main()
{
double a,b,c;
double s,v;
cout<<"请输入长方体的长宽高"<<endl;
cout<<"longth:";
cin>>a;
cout<<"weight:";
cin>>b;
cout<<"height:";
cin>>c;
CCube C1(c,b,a);
cout<<"请输入球体的半径"<<endl;
cout<<"R:";
cin>>a;
CBall C2(a);
cout<<"请输入圆柱的底面半径和高"<<endl;
cout<<"R:";
cin>>a;
cout<<"height:";
cin>>b;
CCylinder C3(a,b);
CSolid *p[3]= {&C1,&C2,&C1}; //定义基类指针数组p,使它每一个元素指向一个派生类对象
for(int i=0; i<6; i++)
{
s=p[i]->get_area();
v=p[i]->get_volum();
cout<<"表面积为:"<<s<<endl;
cout<<"体积为:"<<v<<endl;
}
return 0;
}
第十三周项目六 立体类族共有的抽象类
最新推荐文章于 2022-01-27 16:56:08 发布