CPoint只保存点x和y的整数值?备择方案?

时间:2014-08-19 13:41:52

标签: c++ mfc

我正在使用班级CPoint。我正在尝试并成功地在CPoint的构造函数中传递双精度数。经过一些测试后,我发现CPoint将其值保持为LONG,根据定义,定义为typedef long LONG;这对我们的帮助太大了。但在审核了CPoint构造函数

之后
// create an uninitialized point
CPoint() throw();
// create from two integers
CPoint(int initX, int initY) throw();
// create from another point
CPoint(POINT initPt) throw();
// create from a size
CPoint(SIZE initSize) throw();
// create from an LPARAM: x = LOWORD(dw) y = HIWORD(dw)
CPoint(LPARAM dwPoint) throw();

它看起来确实将x和y值保持为long C ++中是否有预定义的类/结构,它包含x和y点的浮点值?

此外,从cplusplus查看有关C ++变量类型的this page,看起来有long intlong double。如何/为什么(我认为)编译器推断出typedef long LONGlong int而不是long double

3 个答案:

答案 0 :(得分:2)

long单独使用时会被解释为long int

要在标准C ++中保持不同的值,您可以使用std::pair

typedef std::pair<long double, long double> point_t;
point_t t;
t.first = 10.0f;
t.second = -1.f;

对于这个精确的情况,我更喜欢定义一个特殊的结构来保存值,所以你可以像运算符一样添加方法:

struct point_t {
  long double x;
  long double y;

  point_t& operator+=(const point_t& rhs)
  { x += rhs.x; y += rhs.y; return *this; }

  // and so on
};

答案 1 :(得分:1)

CPoint未在C ++中预定义(由MFC库提供)。 C ++不包含几何点的任何预定义类。

答案 2 :(得分:0)

除了其他人给出的有效答案外,这是我的意见。如果您必须使用CPoint(和POINT),则可以从CPoint派生一个类,并提供您自己的构造函数和/或运算符,它们可以获取浮点数和双精度数。如果您没有进行客户区或GDI绘图,则可以使用自定义类或std::pair类模板。