Как переопределить оператор с 2 объектами в - PullRequest
0 голосов
/ 02 февраля 2020

Я учусь на экзамене, и я делаю уроки с оператором overleading. Я знаю, как перегрузить оператора, но у меня проблема с перегрузкой оператора + = и - =: я хочу, чтобы пассажиры со вторым автобусом перешли на первый автобус как можно больше людей.

class bus
{
private:
    const int howSeat;
    int howTake;
public:
    bus(int s=51, int z=0);
    int Free();
     Passenger();
    bus &operator+=(bus k);
    bus & operator-=(bus k);

};

bus &bus::operator+=(bus k)
{
    howTaken+=k.howTaken;
    return *this;
}


int bus::Passanger()
{
    return howTaken;
}

int bus::free()
{
    return HowSeat-HowTaken;
}

bus::bus(int s, int z):howSeat(s)
{
    howTaken=z;
    if(howTaken<0 ||  howTaken>howSeat)
    {
       howTaken=0;
    }
}
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

1 Ответ

0 голосов
/ 03 февраля 2020

В вашем случае вам не нужно возвращать что-либо в перегруженных функциях, это отлично работает с 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;
}
...