早教吧 育儿知识 作业答案 考试题库 百科 知识分享

声明一个Shape(形状)基类,它有两个派生类:TwoDShape(二维图形)、ThreeDShape(三维图形),TwoDShape有两个个派生类:Circle(圆)、Square(长方形).ThreeDShape有两个派生类:Ball(球)、Cylinder

题目详情
声明一个Shape(形状)基类,它有两个派生类:TwoDShape(二维图形)、ThreeDShape(三维图形)
,TwoDShape有两个个派生类:Circle(圆)、Square (长方形).ThreeDShape有两个派生类:Ball(球)、Cylinder(圆柱体).
要求:
1、利用多态性的概念,分别以纯虚函数的形式完成对各种形状的表面积的计算.
2、利用多态性的概念,分别以纯虚函数的形式完成对各种三维图形的体积的计算.
3、编写一普通函数,完成对一组图形的表面积求和.
4、编写一普通函数,完成对一组三维图形的体积求和.
▼优质解答
答案和解析
//照你的要求敲了下,参考下吧
#include
using namespace std;
#define PI 3.1415926
//shape类,纯虚
class Shape
{
public:
virtual float CalcuArea() = 0;
virtual float CalcuVolume() = 0;
};
//二维图形基类,纯虚,继承自shape类
class TwoDShape:public Shape
{
public:
virtual float CalcuArea() = 0;
virtual float CalcuVolume()
{
return 0;
}
};
class ThreeDShape:public Shape
{
public:
virtual float CalcuArea()=0;
virtual float CalcuVolume()=0;
};
//圆形类,继承自TwoDShape
class Circle:public TwoDShape
{
private:
float radius;
public:
Circle(float r):radius(r){}
virtual float CalcuArea()
{
return PI*radius*radius;
}
};
//长方形类,继承自TwoDShape
class Square:public TwoDShape
{
private:
float width;
float height;
public:
Square(float w,float h):width(w),height(h){}
virtual float CalcuArea()
{
return width*height;
}
};
class Ball:public ThreeDShape
{
private:
float radius;
public:
Ball(float r):radius(r){}
virtual float CalcuArea()
{
return 4*PI*radius*radius;
}
virtual float CalcuVolume()
{
return 4/(float)3*PI*radius*radius*radius;
}
};
class Cylinder:public ThreeDShape
{
private:
float radius;
float height;
public:
Cylinder(float r,float h):radius(r),height(h){}
virtual float CalcuArea()
{
return (2*PI*radius*radius+2*PI*radius*height);
}
virtual float CalcuVolume()
{
return (PI*radius*radius*height);
}
};
float CalTotalArea(Shape *p[],float num)
{
float TotalArea = 0;
for (int i = 0;iCalcuArea();
}
return TotalArea;
}
float CalTotalVol(Shape *p[],float num)
{
float TotalVol = 0;
for (int i = 0;iCalcuVolume();
}
return TotalVol;
}
int main()
{
Shape *pS[4];
pS[0] = new Circle(1);
pS[1] = new Square(1,1);
pS[2] = new Ball(1);
pS[3] = new Cylinder(1,1);
float CirArea = pS[0]->CalcuArea();
float SqArea = pS[1]->CalcuArea();
float BalArea = pS[2]->CalcuArea();
float CyArea = pS[3]->CalcuArea();
float BalVol = pS[2]->CalcuVolume();
float CyVol = pS[3]->CalcuVolume();
float TotalArea = CalTotalArea(pS,4);
float TotalVol = CalTotalVol(pS,4);
system("pause");
}