Как перегрузить оператор сложения для ситуации: "сonst int" + "экземпляр класса" ? Именно в таком порядке

pt3 = 2 + pt1; - Для этого фрагмента кода не могу понять, как перегрузить оператор сложения.

Код

//Point.h
class Point
{
private:
    int x;
    int y;

public:

    Point() : x(NULL), y(NULL) {
        std::cout << "Конструктор Point вызван\n\n";
    }
    Point(int x, int y) : x(x), y(y) {
        std::cout << "Конструктор Point вызван\n\n";
    }
    ~Point() {
        std::cout << "Деструктор Point вызван\n\n";
    }
    const Point operator +(const int& a);
    const Point operator +(const Point& a);

    Point operator =(const Point& a);
}
//Point.cpp
const Point Point::operator+(const int& a)
{
    Point temp;
    temp.x = this->x + a;
    temp.y = this->y + a;

    return temp;
}

const Point Point::operator+(const Point& a)
{
    Point temp;
    temp.x = this->x + a.x;
    temp.y = this->y + a.y;

    return temp;
}

Point Point::operator =(const Point& a) {
    this->x = a.x;
    this->y = a.y;

    return *this;
}
//main.cpp

int main() {

Point pt1(1,1);
Point pt2(2,2);
Point pt3;

pt3 = pt1 + 5;
pt3 = 2 + pt1;
pt3 = pt1 + pt2;

return 0;
}

Ответы (1 шт):

Автор решения: Harry

В объявление класса добавьте

friend Point operator +(const int& a, const Point& p);

а вне его

Point operator +(const int& a, const Point& p)
{
    Point temp;
    temp.x = p.x + a;
    temp.y = p.y + a;

    return temp;
}

Ну и по мелочам подправьте код - типа точки с запятой после объявления класса, во всяких

const Point operator +(const Point& a);

имеет смысл перенести const

Point operator +(const Point& a) const;

Исправьте

x(NULL)

на

x(0)

Я бы еще и конструкторы объединил в один

Point(int x = 0, int y = 0) : x(x), y(y) {
    std::cout << "Конструктор Point вызван\n\n";
}

P.S. Как предложил HolyBlackCat, можно просто в классе

friend Point operator +(const int& a, const Point& p)
{
    return {p.x + a, p.y + a};
}
→ Ссылка