2

私がこれを持っているとしましょう:

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ますが、左側に戻るにはどうすればよいですか?

4

3 に答える 3

5

オペレーター=は、オブジェクト自体のメンバーに値を割り当てる必要があります。戻り値は作成するためだけにa = b = cあり、同様のことが機能します。あなたの場合、それは無関係です。また、 がある場合はA = Bin=が使用され、Aがある場合B = A=inBが使用されます。必要なのは、パラメーターを取り、this のメンバーを更新する=inを記述することです。COORDcoor

そして、以下は operator を呼び出しません=:

COORD C=c;

一致するコンストラクターを呼び出します。

そして operator= は、次の*thisような場合に返さなければなりません:a=b=c=d動作しますが、これは慣習的です

于 2012-09-22T11:10:51.773 に答える
1

オブジェクトをオブジェクトにoperator=割り当てるようにをオーバーロードするには、 内でそれを行う必要があります。coorCOORDCOORD 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;

2 行目は、実際には COORD のオブジェクトをcoor引数として取るコンストラクターの呼び出しです。本体は次のようになります。

COORD(coor c):x(c.x),y(c.y)
{
}
于 2012-09-22T11:25:37.337 に答える
1
struct coor
{
   int x;
   int y;
   COORD operator=(coor c)
   {
      COORD C;
      C.x = c.x;
      C.y = c.y;
      return C;
   }
}
于 2012-09-22T11:15:57.970 に答える