C ++ ООП — Можете ли вы «перегрузить приведение» & lt; — трудно объяснить в 1 предложении

Ну, у WinAPI есть POINT struct, но я пытаюсь создать альтернативный класс, чтобы вы могли установить значения x а также y от конструктора.

/**
* X-Y coordinates
*/
class Point {
public:
int X, Y;

Point(void)            : X(0),    Y(0)    {}
Point(int x, int y)    : X(x),    Y(y)    {}
Point(const POINT& pt) : X(pt.x), Y(pt.y) {}

Point& operator= (const POINT& other) {
X = other.x;
Y = other.y;
}
};

// I have an assignment operator and copy constructor.
Point myPtA(3,7);
Point myPtB(8,5);

POINT pt;
pt.x = 9;
pt.y = 2;

// I can assign a 'POINT' to a 'Point'
myPtA = pt;

// But I also want to be able to assign a 'Point' to a 'POINT'
pt = myPtB;

Можно ли перегрузить operator= таким образом, чтобы я мог назначить Point к POINT? Или, может быть, какой-то другой способ добиться этого?

Заранее спасибо.

3

Решение

Это работа оператора преобразования типов:

class Point {
public:
int X, Y;

//...

operator POINT() const {
POINT pt;
pt.x = X;
pt.y = Y;
return pt;
}
};
4

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

Вы можете добавить оператор приведения Point учебный класс:

class Point {
// as before
....
operator POINT () const {
// build a POINT from this and return it
POINT p = {X,Y};
return p;
}
}
4

Используйте оператор преобразования:

class Point
{
public:
operator POINT()const
{
Point p;
//copy data to p
return p;
}
};
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector