用cpp编写:定义一个点Point类,有点坐标属性(x, y),再定义一个矩形Rectangle类,其属性为两个Point点(分别表示矩形对角线上两点的坐标),及含有计算矩形的周长及面积的成员函数;再编写两个Point类的友元函数,分别计算两个点组成的矩形的周长与面积。在主函数中进行测试。
时间: 2024-03-27 19:37:31 浏览: 30
好的,下面是代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
class Point {
private:
double x, y;
public:
Point(double x = 0, double y = 0) : x(x), y(y) {}
double getX() const { return x; }
double getY() const { return y; }
friend double distance(const Point& p1, const Point& p2);
friend double area(const Point& p1, const Point& p2);
};
class Rectangle {
private:
Point p1, p2;
public:
Rectangle(Point p1, Point p2) : p1(p1), p2(p2) {}
double perimeter() const;
double area() const;
};
double distance(const Point& p1, const Point& p2) {
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
return sqrt(dx * dx + dy * dy);
}
double area(const Point& p1, const Point& p2) {
double dx = abs(p1.x - p2.x);
double dy = abs(p1.y - p2.y);
return dx * dy;
}
double Rectangle::perimeter() const {
double a = distance(p1, p2);
return 2 * (a + distance(p1, Point(p2.getX(), p1.getY())));
}
double Rectangle::area() const {
return area(p1, p2);
}
int main() {
Point p1(1, 2), p2(4, 6);
Rectangle r(p1, p2);
cout << "The perimeter of the rectangle is " << r.perimeter() << endl;
cout << "The area of the rectangle is " << r.area() << endl;
cout << "The distance between p1 and p2 is " << distance(p1, p2) << endl;
cout << "The area of the rectangle formed by p1 and p2 is " << area(p1, p2) << endl;
return 0;
}
```
代码解释:
- `Point` 类表示点,含有 x 和 y 两个属性及构造函数。其中 `distance` 和 `area` 都是 `Point` 类的友元函数,分别计算两个点之间的距离和构成的矩形的面积。
- `Rectangle` 类表示矩形,含有两个 `Point` 类型的属性及构造函数。其中 `perimeter` 和 `area` 分别是计算矩形周长和面积的成员函数。
- 在 `main` 函数中,我们定义了两个点 `p1` 和 `p2`,用它来构造一个矩形 `r`。然后通过 `r` 对象调用 `perimeter` 和 `area` 函数来计算矩形的周长和面积。同时,我们也通过 `distance` 和 `area` 函数计算两个点之间的距离和构成的矩形的面积。
阅读全文