Оператор = перегрузка

Допустим, у меня есть это:

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, но как сделать это, чтобы вернуться на левую сторону?

2

Решение

оператор = должен присваивать значения членам самого объекта. Возвращаемое значение нужно просто сделать a = b = c и подобные вещи работают. В вашем случае это не имеет значения. Кроме того, если у вас есть A = B, = определяется в A будет использоваться, и если у вас есть B = A, = в B используется.
Что вам нужно, это написать = в COORD это занимает coor параметр и обновляет члены этого.

И следующее не вызывает оператора=:

COORD C=c;

Он вызывает соответствующий конструктор.

и оператор = ДОЛЖЕН вернуться *this для таких вещей: a=b=c=d работать, но это нормально

5

Другие решения

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

Перегрузить 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)
{
}
1
По вопросам рекламы [email protected]