比较/复制COORD结构;超载

时间:2011-03-02 04:15:12

标签: c++ operator-overloading coordinates

这似乎是微不足道的,但无休止的搜索并没有产生答案。

我需要比较和分配。

如果我无法添加成员函数或朋友函数,我如何重载COORD?

使用这种基于Windows的结构是不好的风格?

另外,我知道我可以编写自己的类(或者只为每个成员执行一次操作),但这个问题确实让我感到疑惑。

2 个答案:

答案 0 :(得分:3)

COORD只有公共成员,因此不需要朋友功能 - 免费运营商就足够了:

bool operator <(COORD const& lhs, COORD const& rhs)
{
    return lhs.Y < rhs.Y || lhs.Y == rhs.Y && lhs.X < rhs.X;
}

bool operator ==(COORD const& lhs, COORD const& rhs)
{
    return lhs.X == rhs.X && lhs.Y == rhs.Y;
}

COORD已经隐含了副本c'tor和operator=,无需定义那些。

答案 1 :(得分:1)

为什么不从public COORD派生您的课程并添加所需的语句? C ++中的structclass相同,但默认情况下所有成员都是public

struct MyCoord : public COORD
{
  // I like to have a typedef at the beginning like this
  typedef COORD Inherited;
  // add ctor, if you like ...
  MyCoord(SHORT x, SHORT y)
    : Inherited::X(x)
    , Inherited::Y(y)
  { }
  // no need for copy ctor because it's actually POD (plain old data)

  // Compatibility ... ;)
  operator COORD&()
  {
      return *this; // may need cast
  }

  COORD* operator&()
  {
     return this; // may need cast
  }
  // declare friends ...
}