在上一个问题点类的基础上,定义一个管理类,成员函数为求解两点之间的距离和求解到原点的距离(1)将点的管理类中的两个成员函数定义为点类的友元函数(2)将点的管理类声明为点类的友元类
时间: 2024-10-27 11:13:54 浏览: 14
基于之前的点类`Point`,我们可以创建一个新的管理类`PointManager`,它负责维护多个点对象,并提供一些对点的操作。我们会在`PointManager`中添加一个向量来存储点,然后将点的相关操作转换成管理类的方法。同时,我们将`distanceToOrigin`和`distanceBetweenPoints`方法设置为`Point`类的友元函数,以便于管理和点类之间相互协作。
首先,我们定义`Point`类保持不变:
```cpp
class Point {
// 省略点类的定义...
};
```
接下来是`PointManager`类:
```cpp
#include <vector>
#include "Point.h"
class PointManager {
private:
std::vector<Point> points;
public:
// 添加点到管理器
void addPoint(const Point &p) {
points.push_back(p);
}
// 距离相关的友元函数
friend double distanceToOrigin(const Point &p);
friend double distanceBetweenPoints(const Point &p1, const Point &p2);
// 其他管理类功能...
};
```
现在,我们将`distanceToOrigin`和`distanceBetweenPoints`方法设为`Point`的友元函数:
```cpp
class Point {
public:
// 添加友元函数
friend double distanceToOrigin(const Point &p);
friend double distanceBetweenPoints(const Point &p1, const Point &p2);
// 省略其他成员函数...
};
```
至于`distanceToOrigin`和`distanceBetweenPoints`的实现,因为之前已经给出了`distance`的示例,所以只需要修改一下参数类型:
```cpp
// distanceToOrigin 函数
double distanceToOrigin(const Point &p) {
return std::sqrt(std::pow(p.x, 2) + std::pow(p.y, 2));
}
// distanceBetweenPoints 函数
double distanceBetweenPoints(const Point &p1, const Point &p2) {
return std::sqrt(std::pow(p1.x - p2.x, 2) + std::pow(p1.y - p2.y, 2));
}
```
阅读全文