Ваш код будет выглядеть так:
class Bag {
public:
Bag();
Bag(Bag const& other); // copy ctor, declared implicitly if you don't declare it
~Bag();
Bag operator+(Bag const& other) const;
private:
int x;
int y;
};
Bag Bag::operator+(Bag const& other) const {
Bag result (*this);
result.x += other.x;
result.y += other.y;
return result;
}
Неявный «текущий объект» для функций-членов указывается специальным значением с именем this . Затем *this
получает этот объект (разыменовывая this ), и он используется для создания (через конструктор копирования) другого Bag с именем result .
Я подозреваю, что этот код взят из домашнего задания, поэтому вы, возможно, не сможете использовать один шаблон действительного оператора сложения , но он распространен, и вы должны знать о нем:
struct Bag {
//...
Bag& operator+=(Bag const& other) {
x += other.x;
y += other.y;
return *this; // return a reference to the "current object"
// as almost all operator=, operator+=, etc. should do
}
};
Bag operator+(Bag a, Bag const& b) {
// notice a is passed by value, so it's a copy
a += b;
return a;
}