已给出的代码编写了一个关于点的类CMyPos和主函数main。 CMyPos类描述坐标值为整数的点,功能包括:以“(x,y)”的方式输出点的坐标;求本点到指定点的距离;重载=判断两个点是否重合,即x坐标值和y坐标值对应相等;重载<判断点到原点的距离是否满足小于关系; 请在//start.与//end之间编写一个关于点的集合的类PosSet (借用STL中的类模板,把PosSet设计成其派生类),功能包括: (1) 创建集合对象,初始状态是空集 (2)重载“+”运算符实现“集合+点”的运算,向集合中添加新的点。注意,因为是集合,要求元素不能重复 (3)重载“+”运算符实现集合的“加法”运算,即,求两个集合的并集。 (4) bool Find(const CMyPos x)一 成员函数,以true/false作为返回值, 表示集合中是否存在指定的点
时间: 2024-04-04 18:32:32 浏览: 137
C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法
下面是关于点的集合的类PosSet的实现:
```c++
#include <iostream>
#include <set>
#include <cmath>
using namespace std;
class CMyPos {
public:
CMyPos() : x(0), y(0) {}
CMyPos(int a, int b) : x(a), y(b) {}
void Print() const { cout << "(" << x << "," << y << ")"; }
double Distance(const CMyPos& a) const { return sqrt(pow(x-a.x, 2) + pow(y-a.y, 2)); }
bool operator==(const CMyPos& a) const { return x==a.x && y==a.y; }
bool operator<(const CMyPos& a) const { return Distance(CMyPos(0,0)) < a.Distance(CMyPos(0,0)); }
private:
int x, y;
};
class PosSet : public set<CMyPos> {
public:
PosSet() : set<CMyPos>() {}
PosSet operator+(const CMyPos& a) const {
PosSet res = *this;
res.insert(a);
return res;
}
PosSet operator+(const PosSet& a) const {
PosSet res = *this;
for (auto i : a)
res.insert(i);
return res;
}
bool Find(const CMyPos x) const {
return (find(x) != end());
}
};
int main() {
CMyPos A(1,2), B(3,4), C(1,2), D(5,6);
A.Print(); cout << " "; B.Print(); cout << " "; C.Print(); cout << " "; D.Print(); cout << endl;
cout << (A==B) << " " << (A==C) << endl;
cout << (A<B) << " " << (B<A) << " " << (C<B) << endl;
PosSet S1, S2;
S1 = S1 + A + B + C;
S2 = S2 + B + C + D;
for (auto i : S1)
i.Print(); cout << endl;
for (auto i : S2)
i.Print(); cout << endl;
PosSet S3 = S1 + S2;
for (auto i : S3)
i.Print(); cout << endl;
cout << S1.Find(A) << " " << S1.Find(D) << endl;
return 0;
}
```
其中,我们继承了STL中的set模板类,并重载了“+”运算符,使其可以实现向集合中添加新的点。同时,我们还重载了“+”运算符,使其可以实现两个集合的并集。最后,我们实现了Find函数,判断集合中是否存在指定的点。
在主函数中,我们演示了如何使用这个类,包括创建集合对象,向集合中添加新的点,求两个集合的并集,以及查找集合中指定的点。
阅读全文