В вашем случае вам не нужно возвращать что-либо в перегруженных функциях, это отлично работает с void. Чтобы сделать возможным то, что вы хотите, вам нужно использовать '&' (например: funstion (type & variable)), это означает, что вы берете адрес переменной, поэтому изменения также будут внесены в исходный. Вы можете увидеть это в этом примере:
#include <iostream>
using namespace std;
class bus
{
private:
const int howSeat;
int howTaken;
public:
bus(int s=51, int z=0);
int Passanger();
void operator+=(bus &k);
};
void bus::operator+=(bus &k) // now all changes made in k, will also be made in bus2
{
if ((k.howTaken + howTaken) > howSeat)
{
k.howTaken = k.howTaken + howTaken - howSeat;
howTaken = howSeat;
}
else
{
howTaken += k.howTaken;
k.howTaken = 0;
}
}
int bus::Passanger()
{
return howTaken;
}
bus::bus(int s, int z):howSeat(s)
{
howTaken = z;
if( howTaken < 0 || howTaken > howSeat)
{
howTaken=0;
}
}
int main()
{
bus bus1(20, 4);
bus bus2(20, 9);
cout << bus1.Passanger() << " " << bus2.Passanger() << endl;
bus1 += bus2;
cout << bus1.Passanger() << " " << bus2.Passanger();
return 0;
}