Смотри у тебя вывод переменных происходит в конструкторе. Поэтому в операторе+ ты создаешь объект с параметрами по умолчанию, которые равны нулю, но после создания уже присваиваешь значения в этот объект.
Ты можешь это лучше увидеть если добавишь одну строку с кодом в оператор+:
trash operator + (const trash & other)
{
trash temp;
temp.x = this->x + other.x;
temp.y = this->y + other.y;
cout << "x = " << temp.x << "\ty = " << temp.y << endl;
return temp;
}
Эту строку ты можешь добавить и к другим операторам чтобы увидеть результат.
Либо ещё один вариант как это можно сделать:
trash operator + (const trash & other)
{
return trash(x + other.x, y + other.y);
}
Таким образом ты сразу в конструктор помещаешь необходимые значения.