早教吧作业答案频道 -->其他-->
声明一个Shape(形状)基类,它有两个派生类:TwoDShape(二维图形)、ThreeDShape(三维图形),TwoDShape有两个个派生类:Circle(圆)、Square(长方形).ThreeDShape有两个派生类:Ball(球)、Cylinder
题目详情
声明一个Shape(形状)基类,它有两个派生类:TwoDShape(二维图形)、ThreeDShape(三维图形)
,TwoDShape有两个个派生类:Circle(圆)、Square (长方形).ThreeDShape有两个派生类:Ball(球)、Cylinder(圆柱体).
要求:
1、利用多态性的概念,分别以纯虚函数的形式完成对各种形状的表面积的计算.
2、利用多态性的概念,分别以纯虚函数的形式完成对各种三维图形的体积的计算.
3、编写一普通函数,完成对一组图形的表面积求和.
4、编写一普通函数,完成对一组三维图形的体积求和.
,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");
}
#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");
}
看了声明一个Shape(形状)基类...的网友还看了以下:
在298K时,NaCl在水中的溶解度为26g100g水.如将1molNaCl溶解在1L水中,此溶解 2020-05-17 …
物理单位换算问题(1km/h=多少m/s)需要换算过程按理说1km/h=1000m/3600s=1 2020-06-09 …
已知传递函数 G(S)=6s2+1/s3+3s2+3s=1 H(S)=(s+1)(s+2)/(s+ 2020-06-27 …
x t d h h h b s m w zx t d h h h 2020-06-27 …
V=(a+2c+KH)(b+2c+KH)H+1/3K2H3,V=h/3(S上+S下+S上S下开根号 2020-07-19 …
棱台体积的计算公式一:V=(1/3)H(S上+S下+√[S上×S下])H是高,S上和S下分别是上下 2020-07-31 …
某反应2AB(g)⇌C(g)+3D(g)在高温时能自发进行,其逆反应在低温下能自发进行,则该反应的△ 2020-11-01 …
判断反应自发性判断一个反应的自发性是用ΔG还是ΔS还是ΔH判断呀?我记得它们之间有个公式ΔG=ΔH- 2020-11-02 …
在测滑轮组机械效率的实验中,对于物体被提升的高度h和弹簧测力计移动的距离s,下列说法中正确的是()A 2020-11-03 …
一列货车以28.8km/h(8m/s)的速度在平直铁路上运行,由于调度失误,在后面600m处有一列快 2020-12-19 …