问题及代码:
/*
*Copyright (c) 2015,烟台大学计算机学院
*All rights reserved.
*文件名称:text.cpp
*作者:徐健
*完成日期:2015年23日
*版本号:v1.0
*
*问题描述: 设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。
设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体
。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。
要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
*输入描述: 无
*程序输出:输出正方体、球体及圆柱体对象的表面积及体积
*/
#include <iostream>
using namespace std;
class CSolid
{
public :
virtual void Getarea()=0;
virtual void Getvolume()=0;
private :
};
class CCube:public CSolid
{
public :
CCube(double x,double y,double z):length(x),width(y),high(z){}
void Getarea()
{
double area;
area=length*width*2+length*high*2+width*high*2;
cout<<area<<endl;
}
void Getvolume()
{
cout<<length*width*high<<endl;
}
private:
double length;
double width;
double high;
};
class CBall:public CSolid
{
public :
CBall(double r):radius(r){}
void Getarea()
{
cout<<4*3.14*radius*radius<<endl;
}
void Getvolume()
{
cout<<(4.0/3.0)*3.14*radius*radius*radius<<endl;
}
private:
double radius;
};
class CCylinder:public CSolid
{
public :
CCylinder(double r,double h):radius(r),high(h){}
void Getarea()
{
double circle,lateral;
circle=2*3.14*radius*radius;
lateral=radius*2*3.14*high;
double total=circle+lateral;
cout<<total<<endl;
}
void Getvolume()
{
double circle;
circle=3.14*radius*radius;
cout<<circle*high<<endl;
}
private:
double radius;
double high;
};
int main()
{
CSolid *p;
CCube ccube(3,3,3);
CBall cball(2);
CCylinder ccylinder(3,5);
p=&ccube;
p->Getarea();
p->Getvolume();
p=&cball;
p->Getarea();
p->Getvolume();
p=&ccylinder;
p->Getarea();
p->Getvolume();
return 0;
}
运行结果: