Programowanie obiektowe c++, przeciążenie operatorów

0

Witam Państwa. Potrzebuję pomocy z tym oto zadaniem zamieszczonym niżej mógłby mi ktoś pomóc je rozwiązać ?

Przepraszam za zły temat ale nie wiem jak nazwać.

Opracować program, w którym zdefiniowana jest klasa Samochód o składowych: Marka, MocSilnika i który udostępnia następujące opcje:
– a : wprowadzenie danych nowego samochodu, utworzenie obiektu klasy Samochód
i zapisanie go do pliku Baza,
– b : wprowadzenie danych samochodu wzorcowego,
– c : przepisanie z pliku Baza do pliku Wybrane tych obiektów klasy Samochód, które
są gorsze od podanego wzorca; obiekt1 < obiekt2 gdy marka obkiektu1 jest taka
sama jak marka obiektu2 i gdy MocSilnika obiektu1 jest mniejsza od MocySilnika
obiektu2 ,
– d : wyprowadzenie wszystkich obiektów ze wskazanego pliku (Baza lub Wybrane),
– x : koniec programu.
W definicji klasy Samochód należy przeciążyć operator < oraz operatory strumieniowe dla zapisu/odczytu obiektów tej klasy (klawiatura, monitor ekranowy, pliki dyskowe).

Poniżej zamieszczam kod który napisałem nie wiem jak dalej ruszyć

#include <iostream>
#include <fstream>
using namespace std;
class Samochod
{
    double MocSilnika;
    char Marka[16];
 
public:
    Samochod(double KM, char M)
    {
        MocSilnika=KM;
        Marka[16]=M;
    }
    friend
     istream& operator >> (istream& klawiatura, Samochod& samochod);
    friend
     ostream& operator << (ostream& monitor, Samochod& samochod);
    friend
     ifstream& operator >> (ifstream& wejscie, Samochod& samochod);
    friend
     ofstream& operator << (ofstream& wysjcie, Samochod& samochod);
    friend
     Samochod operator < (const Samochod& Marka, const Samochod& MocSilnika);
};
istream& operator >> (istream& klawiatura, Samochod& samochod )
{
    cout << "Marka samochodu: " << flush;
    klawiatura >> samochod.Marka;
    cout << "Moc silnika: " << flush;
    klawiatura >> samochod.MocSilnika;
 
    return klawiatura;
}
ostream& operator << (ostream& monitor, Samochod& samochod)
{
    monitor << "Marka samochodu: " << flush;
    monitor << samochod.Marka << endl;
    monitor << "Moc silnika: " << flush;
    monitor << samochod.MocSilnika << endl;
 
    return monitor;
}
ifstream& operator >> (ifstream& wejscie, Samochod& samochod)
{
    wejscie >> samochod.Marka;
    wejscie >> samochod.MocSilnika;
 
    return wejscie;
}
ofstream& operator << (ofstream& wyjscie, Samochod& samochod)
{
    wyjscie << samochod.Marka << ' ';
    wyjscie << samochod.MocSilnika << ' ';
    wyjscie << endl;
 
    return wyjscie;
}
int main()
{
 
    bool dalej=true;
    char pole;
 
    while(dalej)
    {
        cout<<endl<<"Podaj polecenie [a,b,c,d,x]: ";
        cin >> pole;
 
        switch (pole)
        {
            case 'a' :
                Samochod obiekt(double KM, char M);
 
                ofstream plik ("Baza.txt", ios::in);
                        plik<<Marka<<" ";
                        plik<< MocSilnika<<endl;
                        plik.close();
            case 'b' :
            case 'c' :
            case 'd' :  
            case 'x' :      dalej=false;
                            break;
            default :       cout<<"Bledne polecenie. "<<endl;
        }
    }
}

W punkcie a powinno zapisać mi do pliku Baza wprowadzone dane Marka i MocSilnika nie wiem dlaczego jest tam potrzebne utworzenie obiektu klasy Samochód. Który też mi nie działa jak powinien

0

Witam Państwa. Potrzebuję pomocy

Nie zadałeś żadnego konkretnego pytania.
Z czym masz problem?

W zaprezentowanym kodzie nie ma definicji zadeklarowanegooprator<.

Problem polega na punkcie a - (wyciągnięte z priv msg).
– a : wprowadzenie danych nowego samochodu, utworzenie obiektu klasy Samochód
i zapisanie go do pliku Baza,

Której części tego nie rozumiesz?

0

Nie wiem czy piszę kod w dobrym kierunku czy złym ? Nie rozumiem po co utworzenie obiektu klasy Samochód co to ma robić ?

3
ofstream& operator << (ofstream& wyjscie, Samochod& samochod)
{
    wyjscie << samochod.Marka << ' ';
    wyjscie << samochod.MocSilnika << ' ';
    wyjscie << endl;
 
    return wyjscie;
} 

To raczej nie zadziała. Powinien przy kompilacji pojawić się komunikat, że operator<< ma więcej niż jedno przeciążenie
i nie wie, którego użyć. Do przesłania std::string do pliku użyj metody std::string::c_str() lub std::string::data().

ifstream& operator >> (ifstream& wejscie, Samochod& samochod)
{
    wejscie >> samochod.Marka;
    wejscie >> samochod.MocSilnika;
 
    return wejscie;
}

Tutaj wczytywanie będzie OK, jeśli wczytaniu podlega pojedynczy wyraz.
Co będzie, jeśli np. będzie to "Aston Martin"?
Użyj do wczytywania funkcji std::getline(), a dane w pliku zapisuj w nowej linii lub oddzielaj jakimś znakiem (terminatorem),
do którego std::getline() będzie odczytywał dane.

0

Tak z ciekawości, Politechnika Poznańska?

0

przepisanie z pliku Baza do pliku Wybrane tych obiektów klasy Samochód, które
są gorsze od podanego wzorca;

Na jakiej podstawie określasz, że dana marka jest gorsza od wzorca (chodzi o markę, bo moc jest jasno określona)?

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