/*copyright(c)2016.烟台大学计算机学院
* All rights reserved,
* 文件名称:text.Cpp
* 作者:刘涛
* 完成日期:2016年5月22日
* 版本号:vc++6.0
0*问题描述:设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。
设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。
在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。
要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
*/
#include <iostream>
#define PI 3.1415926
using namespace std;
class CSolid
{
public:
virtual double Superficial_area()=0;//表面积
virtual double Volume()=0;//体积
};
/*-----------------------------------------------------------------------------------*/
class CCube:public CSolid//正方体类
{
private:
double length;//正方体的长
public:
CCube(double l):length(l){}//构造函数
double Superficial_area();
double Volume();
};
double CCube::Superficial_area()//求表面积
{
double S_a;
S_a=6*length*length;
return S_a;
}
double CCube::Volume()//求体积
{
double volume;
volume=length*length*length;
return volume;
}
/*-----------------------------------------------------------------------------------*/
class CBall:public CSolid
{
private:
double radius;//球体的半径
public:
CBall(double r):radius(r){}//构造函数
double Superficial_area();
double Volume();
};
double CBall::Superficial_area()
{
double ball_area;
ball_area=4*PI*radius*radius;
return ball_area;
}
double CBall::Volume()
{
double ball_volume;
ball_volume=4/3*PI*radius*radius*radius;
return ball_volume;
}
/*-----------------------------------------------------------------------------------*/
class CCylinder:public CSolid
{
private:
double high;
double radius;
public:
CCylinder(double h,double ra):high(h),radius(ra){}
double Superficial_area();
double Volume();
};
double CCylinder::Superficial_area()
{
double CCylinder_area;
CCylinder_area=2*PI*radius*radius+2*PI*radius*high;
return CCylinder_area;
}
double CCylinder::Volume()
{
double ccylinder_volume;
ccylinder_volume=PI*radius*radius*high;
return ccylinder_volume;
}
/*-----------------------------------------------------------------------------------*/
int main()
{
CSolid *p;
CCube a(6);
p=&a;
cout<<"正方体的表面积为:"<<p->Superficial_area()<<endl;
cout<<"正方体的体积为:"<<p->Volume()<<endl;
cout<<endl;
CBall b(10);
p=&b;
cout<<"球体的表面积为:"<<p->Superficial_area()<<endl;
cout<<"球体的体积为:"<<p->Volume()<<endl;
cout<<endl;
CCylinder c(10,5);
p=&c;
cout<<"圆柱的表面积为:"<<p->Superficial_area()<<endl;
cout<<"圆柱的体积为:"<<p->Volume()<<endl;
return 0;
}
运行结果:
因为基类函数里忘了写public,导致主函数一直运行不通过,眼睁睁看了二十分钟,必要一定要看清楚。
还有每次第一遍敲完代码后有很多错误都是一些打错了的基本错误,以后要注意。