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

Odpowiedz Nowy wątek
2018-05-13 01:19
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

edytowany 2x, ostatnio: xjafajx, 2018-05-13 01:31
Opisz problem - co nie działa, a powinno itd. - kq 2018-05-13 01:27

Pozostało 580 znaków

2018-05-13 01:26
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?


Nie pisz na priv. Zadaj dobre pytanie na forum.
edytowany 4x, ostatnio: YooSy, 2018-05-13 02:23

Pozostało 580 znaków

2018-05-13 01:39
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ć ?

Pozostało 580 znaków

2018-05-13 01:58
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.


Nie pisz na priv. Zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: YooSy, 2018-05-13 02:02

Pozostało 580 znaków

2018-05-13 09:33
0

Tak z ciekawości, Politechnika Poznańska?

Pozostało 580 znaków

2018-05-13 11:58
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)?


Nie pisz na priv. Zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: YooSy, 2018-05-13 11:59

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: Applebot