本关任务:把描述直角坐标系上的一个点的类作为基类,派生出描述一条直线的类和描述一个三角形的类。定义成员函数求出两点间的距离和三角形的面积。 提示:先定义描述点的类 Point;类 Point 的派生类 Line 为直线类,一直线有两个端点,所以它在点类的基础上新增一组点的坐标(x2,y2);三角形类 T 在直线的基础上再新增一组点的坐标(x3,y3),求出三角形的面积。具体要求如下: (1)定义点类 Point int x1,y1;//保护的数据成员(点坐标) 公有构造函数 Point(int a,in
时间: 2024-01-21 08:19:08 浏览: 96
t b);//构造函数 初始化点的坐标 公有成员函数 double distance(Point p);//计算两点间的距离 (2)定义直线类 Line,它是点类 Point 的派生类 int x2,y2;//新增数据成员(第二个端点的坐标) 公有构造函数 Line(int a,int b,int c,int d); //构造函数 初始化直线的两个端点的坐标 公有成员函数 double length(); //计算直线的长度 (3)定义三角形类 T,它是直线类 Line 的派生类 int x3,y3;//新增数据成员(第三个顶点的坐标) 公有构造函数 T(int a,int b,int c,int d,int e,int f); //构造函数 初始化三角形的三个顶点的坐标 公有成员函数 double area(); //计算三角形的面积
以下是完整代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
class Point {
protected:
int x1, y1; //保护的数据成员(点坐标)
public:
Point(int a, int b) { //构造函数 初始化点的坐标
x1 = a;
y1 = b;
}
double distance(Point p) { //计算两点间的距离
return sqrt(pow(x1 - p.x1, 2) + pow(y1 - p.y1, 2));
}
};
class Line : public Point {
protected:
int x2, y2; //新增数据成员(第二个端点的坐标)
public:
Line(int a, int b, int c, int d) : Point(a, b) { //构造函数 初始化直线的两个端点的坐标
x2 = c;
y2 = d;
}
double length() { //计算直线的长度
Point p(x2, y2);
return distance(p);
}
};
class T : public Line {
protected:
int x3, y3; //新增数据成员(第三个顶点的坐标)
public:
T(int a, int b, int c, int d, int e, int f) : Line(a, b, c, d) { //构造函数 初始化三角形的三个顶点的坐标
x3 = e;
y3 = f;
}
double area() { //计算三角形的面积
Line l1(x1, y1, x2, y2);
Line l2(x1, y1, x3, y3);
Line l3(x2, y2, x3, y3);
double a = l1.length();
double b = l2.length();
double c = l3.length();
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
};
int main() {
T t(0, 0, 3, 0, 0, 4); //构造一个三角形对象
cout << "三角形面积:" << t.area() << endl; //输出三角形的面积
return 0;
}
```
输出结果为:
```
三角形面积:6
```
阅读全文