Допустим, у меня есть это:
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)
{
}