Przeciążanie operatorów

0

Witam. Mam takie zadanko

Napisz deklarację klasy Auto, która ma pola

  • nazwa - stałe pole tekstowe zawierające identyfikator auta
  • maxOsob – pole o stałej dodatniej wartości całkowitej, określające maksymalną liczbę osób w aucie
  • osob – pole o zmiennej nieujemnej wartości całkowitej określające aktualną liczbę osób w aucie (oczywiście nie może przekraczać maxOsob)
    oraz
  • konstruktor inicjujący wartości pól poprzez swoje parametry, domyślnie puste auto pięciosobowe (I)
  • przeciążony operator += pozwalający na wejście do auta n osobom (I)
  • przeciążony operator -= pozwalający na wyjście z auta n osobom
  • przeciążony operator += realizujący przesiadkę z innego auta tylu osób ile można
  • przeciążony operator -= realizujący przesiadkę do innego auta tylu osób ile można ( w obu ostatnich metodach następuje zmiana stanu drugiego auta) (I)

Jak będzie wyglądało przeciążenie operatora +=? Mam dodatkowo zainicjować kolejną zmienna np n - określającą ile osob ma wsiąść do auta?
Do tej pory napisałem tyle

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

class Auto
{
   const string nazwa;
   unsigned const int maxOsob;
   unsigned int osob;
   public:
       Auto(string n, int m=5, int o=0):nazwa(n),maxOsob(m),osob(o){}
       int &operator +=(unsigned const int o)
       {
           int n;
           cout<<"podaj ile osob: ";
           cin>>n;
           if(osob+n>maxOsob)
           {
               cout<<"\nkomplet osob w aucie";
           }
           else
           {
               osob+=n;
               return osob;
           }

       }
    void Wyswietl()
    {
        cout<<"nazwa: "<<nazwa<<"\nLiczba miejsc: "<<maxOsob<<"\nLiczba osob w aucie: "<<osob;
    }
};
int main()
{
    Auto Hybryd = new Auto ("hybryda",5,0);
    Hybryd+=1;
    return 0;
}


5

Normalnie poleciłbym lekturę https://dsp.krzaq.cc/post/304/jak-przeladowywac-operatory-w-mojej-klasie/ (w sumie wciąż polecam), ale tutaj widać, że ktoś chce abyś wykorzystał przeciążanie operatorów w nietypowy, głupi, sposób.

    Auto Hybryd = new Auto ("hybryda",5,0);
    Hybryd+=1;

To się nie kompiluje. https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

Swoją drogą:

Napisz deklarację klasy Auto

Gdyby się czepiać słówek, to class Auto; by było wystarczające, bo zadanie nie wymaga definicji. Ale domyślając się "o co chodziło prowadzącemu", masz napisać definicje następujących operatorów:

Auto& operator+=(int);
Auto& operator-=(int);
Auto& operator+=(Auto&);
Auto& operator-=(Auto&);
0

Czyli jak powinna wyglądać definicja przeciążenia operatora

Auto& operator+=(int);

Nie mam pomysłu jak to ugryźć ale jeśli będę miał już to pierwsze to z resztą myślę, że sobie poradzę

0

Coś takiego:

#include <iostream>
#include <cstdlib>
#include <string>
 
using namespace std;
 
class Auto
{
   const string nazwa;
   const int maxOsob;
   int osob;
   public:
       Auto(string n, int m=5, int o=0):nazwa(n),maxOsob(m),osob(o){}
       
       friend Auto &operator +=(Auto &a, int i)
       {
            a.osob += i;
            return a;
       }
       
       
    void Wyswietl()
    {
        cout<<"nazwa: "<<nazwa<<"\nLiczba miejsc: "<<maxOsob<<"\nLiczba osob w aucie: "<<osob;
    }
};
int main()
{
    Auto Hybryd = Auto ("hybryda", 5, 0);
    Hybryd.Wyswietl();
    std::cout<< std::endl;
    Hybryd+=90;
    Hybryd+=90;
    Hybryd.Wyswietl();
    return 0;
}
0

Czyli jak zrobić ten warunek żeby nie mogło wsiąść więcej osób niż jest to możliwe ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1