przeniesienie obiektu do innej metody
Ostatnio zmodyfikowano 2016-09-05 14:33
hunter44 Temat założony przez niniejszego użytkownika |
» 2016-09-04 20:34:00 Bardzo dziękuję. |
|
hunter44 Temat założony przez niniejszego użytkownika |
» 2016-09-05 12:08:11 Poradzilem sobie z zapisem danych do pliku. Problem mam teraz w drugą stronę. Chcę z pliku wczytać dane. Napisałem to po swojemu, ale nie działa. #include<iostream> #include <string> #include <process.h> #include <list> #include <cstddef> #include <fstream> #include<cstdlib>
using namespace std;
class Pilkarz { private: string imie; string nazwisko; string pozycja; public: list < Pilkarz > lista; Pilkarz::Pilkarz( string = "Jan", string = "kowalski", string = "Napastnik" ) { string a; string b; string d; imie = a; nazwisko = b; pozycja = d; } friend istream & operator >>( istream & is, Pilkarz & Pilkarz ) { cout << "\n\nImie: "; is >> Pilkarz.imie; cout << "Nazwisko: "; is >> Pilkarz.nazwisko; cout << "Pozycja:"; is >> Pilkarz.pozycja; cout << "\n\n"; return is; } friend ostream & operator <<( ostream & os, const Pilkarz & Pilkarz ) { for( auto const & elem: Pilkarz.lista ) { os << elem.imie << ' ' << elem.nazwisko << ", " << elem.pozycja << '\n'; } return os; } void dodaj_pilkarza() { Pilkarz pilkarz; Pilkarz p1; cin >> pilkarz; lista.push_back( pilkarz ); } };
int main() { Pilkarz pilkarz; int flaga = 0; char switchOpcja { }; do { cout << "1. Dodaj pilkarza" << endl; cout << "2. Pokaz liste" << endl; cout << "3. Zapisz do pliku" << endl; cout << "4. Wczytaj z pliku" << endl; cout << "5. Zakoncz" << endl; cin >> switchOpcja; switch( switchOpcja ) { case '1': { pilkarz.dodaj_pilkarza(); flaga = 1; break; } case '2': { if( flaga == 0 ) cout << "Lista jest pusta kolego. Najpierw kogos dodaj" << endl; cout << pilkarz << '\n'; break; } case '3': { if( flaga == 0 ) cout << "Chlopie ! Co TY chcesz zapisac skoro nie stworzyles listy ?" << endl; fstream plik; plik.open( "lista.txt", ios::out | ios::app ); plik << pilkarz << '\n'; plik.close(); break; } case '4': { ifstream plik; plik.open( "lista.txt" ); if( plik.good() == false ) { cout << "Plik nie istnieje\n" << endl; break; } while( true ) { flaga = 1; if( plik.good() ) { plik >> pilkarz; Pilkarz pilkarz; Pilkarz p1; list < Pilkarz > lista; lista.push_back( pilkarz ); cout << pilkarz; } else break; } plik.close(); } break; case '5': { cout << "Koniec.\n"; break; } default: { cerr << "Jakis nieokreslony przypadek.\n"; } } } while( switchOpcja != '5' ); system( "PAUSE" ); return 0; }
|
|
karambaHZP |
» 2016-09-05 12:38:17 Sprawdzałeś co jest w pliku po zapisaniu. Nawet nie przeciążyłeś operatorów dla strumieni plikowych. Jak to ma zadziałać? |
|
hunter44 Temat założony przez niniejszego użytkownika |
» 2016-09-05 13:40:45 Nie kompiluje się. friend ifstream & operator >>( ifstream & is, const Pilkarz & pilkarz ) { getline( is, pilkarz.imie ); is >> pilkarz.nazwisko; is >> pilkarz.pozycja; return is; }
|
|
Monika90 |
» 2016-09-05 13:43:01 class Pilkarz { list < Pilkarz > lista;
Taki kod oznacza, że piłkarz składa się z piłkarzy. Jaki to ma sens? Zresztą, taki kod jet błędny, bo Pilkarz to typ niekompletny, dopiero w przyszłej wersji C++, czyli w C++17, będzie dopuszczalne użycie typów niekompletnych jako elementów kontenerów. Pilkarz::Pilkarz( string = "Jan", string = "kowalski", string = "Napastnik" ) { string a; string b; string d; imie = a; nazwisko = b; pozycja = d; }
Ten kod też nie ma sensu. Nie kompiluje się.
friend ifstream & operator >>( ifstream & is, const Pilkarz & pilkarz )
|
Nie kompiluje się z powodu const. |
|
carlosmay |
» 2016-09-05 14:33:16 @hunter44 Nie wiem czemu komplikujesz sobie życie. Dostałeś gotowy program, napisany wg ogólnie przyjętych zasad oraz wskazówkami co możesz jeszcze zmienić, aby było ci wygodnie. Już bardziej nie da się pomóc (chyba, że gotowca, którego prawie masz).
Ostatni kod, to praktycznie powtórzenie pierwszych twoich zmagań (jakbyś nie wyciągał wniosków). Proponuję spokojnie przysiąść się do lektury: - Programowanie obiektowo orientowane ogólnie. - Szczególnie - budowa klasy, czym jest obiekt, czym jest typ zdefiniowany przez użytkownika. - Użycie metod. - Przeciążanie operatorów. - i oczywiście podstawy tj. po co są pętle, instrukcje wielokrotnego wyboru, zasięg zmiennych itd.
Temat wydaje się być wyczerpany. |
|
1 2 « 3 » |