Как перегрузить оператор сложения для ситуации: "с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};
}