运算符 = 重载

Operator = overloading

本文关键字:重载 运算符      更新时间:2023-10-16

假设我有这个:

struct coor
{
   int x;
   int y;
   COORD operator=(coor c)
   {
      COORD C={c.x,c.y}
      return C;
   }
}

我需要做:

coor c={0,0};
COORD C=c;

我可以将运算符重载添加到coor,但是您如何做到这一点以返回左侧?

运算符=必须为对象本身的成员赋值。返回值的存在只是为了使a = b = c和类似的事情正常工作。在您的情况下,这是无关紧要的。此外,如果您有A = B,将使用 A 中定义的=,如果您有 B = A ,则使用 B 中的=。您需要在COORD中编写一个=,该coor参数并更新其成员。

并且以下内容不调用运算符=

COORD C=c;

它调用匹配的构造函数。

运算符 = 必须返回*this如下: a=b=c=d工作,但这是常规

struct coor
{
   int x;
   int y;
   COORD operator=(coor c)
   {
      COORD C;
      C.x = c.x;
      C.y = c.y;
      return C;
   }
}

要重载operator=以便它将coor对象分配给COORD对象,您必须在COORD struct中执行此操作:

struct COORD
{
    int x;
    int y;
    COORD& operator=(coor& c)
    {
        this->x = c.x;
        this->y = c.y;
        return *this;
    }
};

但是,正如其他人提到的,此重载适用于以下分配:

coor c = {0,0};
COORD C;
C = c;

但不适合

coor c = {0,0};
COORD C = c;

因为第二行实际上是对 COORD 构造函数的调用,它将 coor 的对象作为参数。身体可能看起来像这样:

COORD(coor c):x(c.x),y(c.y)
{
}