私がこれを持っているとしましょう:
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
ますが、左側に戻るにはどうすればよいですか?
私がこれを持っているとしましょう:
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
in=
が使用され、A
がある場合B = A
は=
inB
が使用されます。必要なのは、パラメーターを取り、this のメンバーを更新する=
inを記述することです。COORD
coor
そして、以下は operator を呼び出しません=
:
COORD C=c;
一致するコンストラクターを呼び出します。
そして operator= は、次の*this
ような場合に返さなければなりません:a=b=c=d
動作しますが、これは慣習的です
オブジェクトをオブジェクトに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;
2 行目は、実際には COORD のオブジェクトをcoor
引数として取るコンストラクターの呼び出しです。本体は次のようになります。
COORD(coor c):x(c.x),y(c.y)
{
}
struct coor
{
int x;
int y;
COORD operator=(coor c)
{
COORD C;
C.x = c.x;
C.y = c.y;
return C;
}
}