编写一个程序计算“三角形、正方形、圆形"三种图形的面积,求:a)抽象出一个基类base b)在其中说明一个虚函数来球面积

编写一个程序计算“三角形、正方形、圆形"三种图形的面积,求:a)抽象出一个基类base b)在其中说明一个虚函数来球面积; c)利用派生类定义“三角形,正方形、圆形"d)缩写主函数并测试
juesha207 1年前 已收到1个回答 举报

银色梦想 幼苗

共回答了17个问题采纳率:94.1% 举报

用C++写的,代码如下:
#include
#include
#include
#include
using namespace std;
//存放一个点
struct Point
{
x09Point ():
x09x09x(0.0),
x09x09y(0.0)
x09{
x09}
x09Point(double _x, double _y):
x09x09x(_x),
x09x09y(_y)
x09{
x09}
x09//计算两个点之间的距离
x09double distance(Point point)
x09{
x09x09return sqrt((point.x - x) * (point.x - x) + (point.y - y) * (point.y - y));
x09}
x09double x;
x09double y;
};
//基类
class Base
{
public:
x09virtual double getArea() = 0;
x09//设置点的集合
x09void setPoint(const vector& pointSet)
x09{
x09x09m_pointSet = pointSet;
x09}
protected:
x09vector m_pointSet;
};
//三角形
class Triangle : public Base
{
public:
x09//根据三个点的坐标计算面积
x09virtual double getArea()
x09{
x09x09if (m_pointSet.size() < 3)
x09x09x09return 0.0;
x09x09//海伦公式
x09x09Point pointA = m_pointSet.front();
x09x09Point pointB = *(m_pointSet.begin() + 1);
x09x09Point pointC = *(m_pointSet.begin() + 2);
x09x09double a = pointB.distance(pointC);
x09x09double b = pointA.distance(pointC);
x09x09double c = pointB.distance(pointA);
x09x09double p = (a + b + c) / 2.0;
x09x09return sqrt(p * (p-a) * (p-b) * (p-c));
x09}
};
//正方形
class Rectangle : public Base
{
public:
x09//根据两个点的坐标计算正方形边长,然后计算面积
x09virtual double getArea()
x09{
x09x09if (m_pointSet.size() < 2)
x09x09x09return 0.0;
x09x09Point pointA = m_pointSet.front();
x09x09Point pointB = *(m_pointSet.begin() + 1);
x09x09double edgeLength = pointA.distance(pointB);
x09x09return edgeLength * edgeLength;
x09}
};
//圆
class Circle : public Base
{
public:
x09//根据两个点的坐标计算圆的半径,然后计算面积
x09virtual double getArea()
x09{
x09x09if (m_pointSet.size() < 2)
x09x09x09return 0.0;
x09x09Point pointA = m_pointSet.front();
x09x09Point pointB = *(m_pointSet.begin() + 1);
x09x09double length = pointA.distance(pointB);
x09x09return 3.141592653 * length * length;
x09}
};
int main()
{
x09vector point;
x09point.push_back(Point(0, 0));
x09point.push_back(Point(0, 50));
x09//圆,放入圆心和圆上的一个点
x09Circle circle;
x09circle.setPoint(point);
x09double area = circle.getArea();
x09cout

1年前

9
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.745 s. - webmaster@yulucn.com