c++ 程序 shape 求面积 问题 涉及派生

下列shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数.请从shape类派生三角形类(tr... 下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数.请从shape类派生三角形类(triangle),矩形类(rectangle),并给出具体的求面积函数.编写程序验证求面积函数的正确性。Shape,total的定义如下如示:
Class shape{
Public:
Virtual float are()=0
};
Float total(shape*s[],int n)
{
Float sum=0.0;
For(int i=0;i<n;i++)
Sum+=s[i]->area();
Return sum;
}
希望是正确的 明天考试了 速度啊!!!!
展开
 我来答
georangel
2010-04-14 · TA获得超过541个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:367万
展开全部
#include <math.h>

class Shape{ // 关键字小写
public:
virtual float area()=0; // 函数声明加结束符号;
};

class Triangle : public Shape{
private:
float fA,fB,fC;
public:
Triangle()
{
fA = fB = fC = 0.0;
}
Triangle(float fTA, float fTB, float fTC)
{
fA = fB = fC = 0.0;
if (fTA>fA && fTB>fB && fTC>fC &&
fTA+fTB>fTC && fTA+fTC>fTB && fTB+fTC>fTA)
{ // 是否为三角形
fA = fTA; fB = fTB; fC = fTC;
}
}
float area()
{
float fArea;
// 三角形面积公式
fArea = sqrt(fA*fA*fC*fC - (fA*fA + fC*fC - fB*fB)*(fA*fA + fC*fC - fB*fB)/4)/2;
return fArea;
}
};

class Rectangle : public Shape{
private:
float fW,fH;
public:
Rectangle()
{
fW = fH = 0.0;
}
Rectangle(float fTA, float fTB)
{
fW = fH = 0.0;
if (fTA>fW && fTB>fH )
{
fW = fTA; fH = fTB;
}
}
float area()
{
float fArea;
// 矩形面积公式
fArea = fW * fH;
return fArea;
}
};

float total(Shape* shape[],int n)
{
int iA;
float sum = 0;
for (iA=0; iA<n; iA++)
{ // 父类指针引用子类对象
sum += shape[iA]->area();
}
return sum;
}

int main()
{
Shape *shape[2];
shape[0] = new Triangle(3,4,5);
shape[1] = new Rectangle(5,6);

cout << "total area:" << total(shape,2) << endl;

delete shape[0];
delete shape[1];
return 1;
}
傲世修罗王
2010-04-14 · TA获得超过1085个赞
知道小有建树答主
回答量:1034
采纳率:0%
帮助的人:751万
展开全部
#include <math.h>
#include <iostream>
using namespace std ;

class Shape
{
public:
virtual float area() = 0 ;
};

//三角形
class Triangle:public Shape
{
public:
Triangle(float a, float b, float c):_a(a),_b(b),_c(c)
{

}

virtual float area()
{
float p = (_a + _b + _c) / 2 ;
float s = sqrt(p * (p - _a) * (p - _b) * (p - _c)) ;
return s ;
}

private:
float _a ;
float _b ;
float _c ;
};

// 矩形
class Rectangle:public Shape
{
public:
Rectangle(float width, float height):_width(width), _height(height)
{

}

virtual float area()
{
return _width * _height ;
}

private:
float _width ;
float _height ;
} ;

float total(Shape* s[], int n)
{
float sum = 0.0;
for(int i = 0;i < n; i++)
sum += s[i]->area();
return sum;
}

int main(void)
{
Shape *shape = new Rectangle(2, 5) ;
cout << shape->area() << endl ;
system("pause") ;
return 0 ;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式