用c++定义一个Point类,有点坐标属性(x,y),再定义一个矩形Rectangle类,其属性为两个点Point点,以及含有计算矩形的周长及面积的成员函数;再编写两个Point类的友元函数,分别计算两个点组成的矩形的周长与面积
时间: 2024-05-09 19:21:51 浏览: 116
好的,我已经记录了你对我的要求。下面是你的问题的回答:
以下是用 C 定义一个 Point 类和 Rectangle 类,以及计算周长和面积的函数:
```c
#include <math.h>
typedef struct {
double x;
double y;
} Point;
typedef struct {
Point p1;
Point p2;
} Rectangle;
double calcDistance(Point p1, Point p2) {
return sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2));
}
double calcArea(Rectangle rec) {
double width = calcDistance(rec.p1, Point{rec.p2.x, rec.p1.y});
double height = calcDistance(rec.p1, Point{rec.p1.x, rec.p2.y});
return width * height;
}
double calcPerimeter(Rectangle rec) {
double width = calcDistance(rec.p1, Point{rec.p2.x, rec.p1.y});
double height = calcDistance(rec.p1, Point{rec.p1.x, rec.p2.y});
return 2 * (width + height);
}
double calcArea(Point p1, Point p2) {
Rectangle rec{p1, p2};
return calcArea(rec);
}
double calcPerimeter(Point p1, Point p2) {
Rectangle rec{p1, p2};
return calcPerimeter(rec);
}
```
上面定义的 calcDistance 函数能够计算出两个点之间的距离,而 calcArea 和 calcPerimeter 函数则是 Rectangle 类的成员函数,分别计算矩形的面积和周长。
下面是两个 Point 类的友元函数,分别计算两个点组成的矩形的周长和面积:
```c
double calcArea(Point p1, Point p2);
double calcPerimeter(Point p1, Point p2);
class Point {
public:
Point(double _x, double _y) : x(_x), y(_y) {}
friend double calcArea(Point p1, Point p2);
friend double calcPerimeter(Point p1, Point p2);
private:
double x;
double y;
};
```
这里用了 C++ 的语法来定义 Point 类,但是在 friend 关键字后面的两个函数声明使用了 C 语言的语法。这两个函数将 Point 类声明为它们的友元,从而能够读取 Point 类的私有成员 x 和 y,并且计算两个点组成的矩形的周长和面积。注意,这里的 Point 类与前面定义的 Point 类并没有任何关系,它只是为了演示两个友元函数的实现方式。
阅读全文