求用C++编写几何点(二维平面上)的类Point,包括位置属性(二维坐标x,y)

2024-12-01 11:56:53
推荐回答(1个)
回答1:

下面这个类是我以前写的。
你只需稍做修改函数名就可以了,且功能大得多。
输出的话。
  cout<<"after moving…" << p <就可以了,不需要display。

template
class point
{
public:
T x;
T y;
point() {};
point(T a,T b)
{
x = a;
y = b;
}

point(const point& a)
{
x = a.x;
y = a.y;
}

point& operator = (const point& p)
{
x = p.x;
y = p.y;
}

friend point operator - (point& p1, point& p2)
{
point p(p1.x - p2.x, p1.y - p2.y);
return p;
}
void MoveTo(T a,T b)
{
x = a;
y = b;
}
void SetX(T a)
{
x = a;
}
void SetY(T a)
{
y = a;
}

T GetX()
{
return x;
}

T GetY()
{
return y;
}
friend T crossProduct(point p1, point p2) //向量叉积
{
return p1.x * p2.y - p1.y * p2.x;
}

friend T direction(point p1, point p2, point pO) // 向量叉积 之差 判断方向
{
return crossProduct(p1 - pO, p2 - pO);
}

friend bool operator == (point& p1, point& p2) //判断位置
{
return (abs(p1.x - p2.x) < EP && abs(p1.y - p2.y) < EP);
}

friend T dist(point p1, point p2) //计算距离
{
return sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y));
}

friend istream& operator >> (istream& input, point& p) //输入
{
input >> p.x;
input >> p.y;
return input;
}

friend ostream& operator << (ostream& output, point& p) //输出
{
output << p.x << ' ' << p.y;
return output;
}
};