我有类Line,代表二维线。它具有检查2d点是否位于此行的功能。
class Line
{
private:
float a,b,c: //line coefficients
public:
bool checkPointOnLine();
.....
}
现在我必须检查找到两条线的交叉点。我想知道将新成员函数放在类Line中是否更好(如
)class Line
{
private:
float a,b,c: //line coefficients
public:
bool checkPointOnLine();
Point getIntersectionPoint(const Line& line);
.....
}
或使用非会员功能
Point getIntersectionPoint(const Line& l1,const Line& l2);
答案 0 :(得分:2)
虽然在很大程度上这是一个偏好问题,但由于对称性,静态或非成员函数方法稍微更优选。
两次通话时
a.someFunction(b)
和
b.someFunction(a)
总是返回相同的结果,一个对称函数
someFunction(a, b)
更直观。
请注意,由于交叉点可能不存在(对于平行线)或者具有无限数量的点(对于两条相同的线),因此返回Point
并不理想。你最好返回一对Point
及其有效性的一些指标,例如
enum LineIntersectionKind {
Valid
, Empty
, Infinite
};
pair<Point,LineIntersectionKind> getIntersectionPoint(const Line& l1,const Line& l2);