编写一个程序计算“三角形、正方形、圆形"三种图形的面积,求:a)抽象出一个基类base b)在其中
答案:1 悬赏:20
解决时间 2021-02-03 22:43
- 提问者网友:你在我眼中是最帅
- 2021-02-02 22:05
编写一个程序计算“三角形、正方形、圆形"三种图形的面积,求:a)抽象出一个基类base b)在其中说明一个虚函数来球面积; c)利用派生类定义“三角形,正方形、圆形"d)缩写主函数并测试
最佳答案
- 二级知识专家网友:你好陌生人
- 2021-02-02 22:33
用C++写的,代码如下:
#include <string>
#include <vector>
#include <iostream>
#include <math.h>
using namespace std;
//存放一个点
struct Point
{
Point ():
x(0.0),
y(0.0)
{
}
Point(double _x, double _y):
x(_x),
y(_y)
{
}
//计算两个点之间的距离
double distance(Point point)
{
return sqrt((point.x - x) * (point.x - x) + (point.y - y) * (point.y - y));
}
double x;
double y;
};
//基类
class Base
{
public:
virtual double getArea() = 0;
//设置点的集合
void setPoint(const vector<Point>& pointSet)
{
m_pointSet = pointSet;
}
protected:
vector<Point> m_pointSet;
};
//三角形
class Triangle : public Base
{
public:
//根据三个点的坐标计算面积
virtual double getArea()
{
if (m_pointSet.size() < 3)
return 0.0;
//海伦公式
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
Point pointC = *(m_pointSet.begin() + 2);
double a = pointB.distance(pointC);
double b = pointA.distance(pointC);
double c = pointB.distance(pointA);
double p = (a + b + c) / 2.0;
return sqrt(p * (p-a) * (p-b) * (p-c));
}
};
//正方形
class Rectangle : public Base
{
public:
//根据两个点的坐标计算正方形边长,然后计算面积
virtual double getArea()
{
if (m_pointSet.size() < 2)
return 0.0;
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
double edgeLength = pointA.distance(pointB);
return edgeLength * edgeLength;
}
};
//圆
class Circle : public Base
{
public:
//根据两个点的坐标计算圆的半径,然后计算面积
virtual double getArea()
{
if (m_pointSet.size() < 2)
return 0.0;
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
double length = pointA.distance(pointB);
return 3.141592653 * length * length;
}
};
int main()
{
vector<Point> point;
point.push_back(Point(0, 0));
point.push_back(Point(0, 50));
//圆,放入圆心和圆上的一个点
Circle circle;
circle.setPoint(point);
double area = circle.getArea();
cout << "Circle : "<< area << endl;
//正方形,放入相邻的两个点
Rectangle rectangle;
rectangle.setPoint(point);
area = rectangle.getArea();
cout << "Rectangle : "<< area << endl;
point.push_back(Point(50, 50));
//三角形,放入三个顶点
Triangle triangle;
triangle.setPoint(point);
area = triangle.getArea();
cout << "Triangle : "<< area << endl;
return 0;
}
#include <string>
#include <vector>
#include <iostream>
#include <math.h>
using namespace std;
//存放一个点
struct Point
{
Point ():
x(0.0),
y(0.0)
{
}
Point(double _x, double _y):
x(_x),
y(_y)
{
}
//计算两个点之间的距离
double distance(Point point)
{
return sqrt((point.x - x) * (point.x - x) + (point.y - y) * (point.y - y));
}
double x;
double y;
};
//基类
class Base
{
public:
virtual double getArea() = 0;
//设置点的集合
void setPoint(const vector<Point>& pointSet)
{
m_pointSet = pointSet;
}
protected:
vector<Point> m_pointSet;
};
//三角形
class Triangle : public Base
{
public:
//根据三个点的坐标计算面积
virtual double getArea()
{
if (m_pointSet.size() < 3)
return 0.0;
//海伦公式
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
Point pointC = *(m_pointSet.begin() + 2);
double a = pointB.distance(pointC);
double b = pointA.distance(pointC);
double c = pointB.distance(pointA);
double p = (a + b + c) / 2.0;
return sqrt(p * (p-a) * (p-b) * (p-c));
}
};
//正方形
class Rectangle : public Base
{
public:
//根据两个点的坐标计算正方形边长,然后计算面积
virtual double getArea()
{
if (m_pointSet.size() < 2)
return 0.0;
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
double edgeLength = pointA.distance(pointB);
return edgeLength * edgeLength;
}
};
//圆
class Circle : public Base
{
public:
//根据两个点的坐标计算圆的半径,然后计算面积
virtual double getArea()
{
if (m_pointSet.size() < 2)
return 0.0;
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
double length = pointA.distance(pointB);
return 3.141592653 * length * length;
}
};
int main()
{
vector<Point> point;
point.push_back(Point(0, 0));
point.push_back(Point(0, 50));
//圆,放入圆心和圆上的一个点
Circle circle;
circle.setPoint(point);
double area = circle.getArea();
cout << "Circle : "<< area << endl;
//正方形,放入相邻的两个点
Rectangle rectangle;
rectangle.setPoint(point);
area = rectangle.getArea();
cout << "Rectangle : "<< area << endl;
point.push_back(Point(50, 50));
//三角形,放入三个顶点
Triangle triangle;
triangle.setPoint(point);
area = triangle.getArea();
cout << "Triangle : "<< area << endl;
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯