Podstawy programowania PP – WYK6 Wojciech Pieprzyca
Struktury Struktura łączy w sobie kilka zmiennych, które mogą różnić się typami danych. Zazwyczaj zmienne te związanych są ze sobą w jakiś logiczny sposób. Do struktury możemy odwoływać się jako do całości. struct osoba { char imie[20]; char nazwisko[30]; char adres[40]; int wiek; float pensja; }; UWAGA! Deklaracja struktury kończy się średnikiem!
Struktury Strukturę można traktować jako nowy typ danych tzn. możliwe będzie utworzenie zmiennych typu strukturalnego np. jeśli chcemy posiadać zmienną w której będzie można przechować informacje na temat danej osoby np. pracownika to możemy taką zmienną zadeklarować w następujący sposób: osoba pracownik; Inicjalizacja zmiennej strukturalnej danymi może odbyć się już w fazie deklaracji takiej zmiennej podobnie jak to miało miejsce w przypadku tablic: osoba pracownik = {”Jan”,”Kowalski”,”Gliwice”, 28,4567.34};
Struktury Możliwe jest także inicjalizowanie każdego z pól zmiennej strukturalnej z osobna: strcpy(pracownik.imie, ”Jan”); strcpy(pracownik.nazwisko, ”Kowalski”); strcpy(pracownik.adres, ”Gliwice”); pracownik.wiek = 28; pracownik.pensja = 4567.34; Oczywiście możemy utworzyć więcej niż jedną zmienną typu strukturalnego: osoba pracownik2 = {”Marek”,”Nowak”,”Pszczyna”, 33,2345.34};
Struktury A nawet całej tablicy zmiennych strukturalnych: osoba pracownicy[100]; strcpy(pracownicy[0].imie, ”Jan”); strcpy(pracownicy[0].nazwisko, ”Kowalski”); strcpy(pracownicy[0].adres, ”Gliwice”); pracownik.wiek = 28; pracownik.pensja = 4567.34;
Struktury W strukturze mogą znaleźć się także funkcje nazywane wówczas metodami. struct osoba { char imie[20]; char nazwisko[30]; char adres[40]; int wiek; float pensja; void wyswietl() cout << "Imie: " << imie << endl; cout << "Nazwisko: " << nazwisko << endl; cout << "Adres: " << adres << endl; cout << "Wiek:" << wiek << endl; cout << "Pensja" << pensja; } };
Struktury Metodę umieszczoną w strukturze można wywołać posługując się operatorem kropki: pracownik.wyswietl(); Konstruktor Konstruktor to metoda (funkcja) w strukturze danych posiadająca taką samą nazwę jak nazwa struktury. Jeżeli obiekt nie ma jawnie zadeklarowanego konstruktora to jest on tworzony automatycznie w czasie kompilacji. Konstruktor jest wywoływany w czasie tworzenia obiektu.
Struktury Konstruktor nie zwraca żadnego typu i w czasie jego deklaracji nie podajemy żadnego typu. Przykład konstruktora: osoba(char imie[20], char nazwisko[30], char adres[40], int wiek, float pensja) { strcpy(this->imie,imie); strcpy(this->nazwisko,nazwisko); strcpy(this->adres,adres); this->wiek = wiek; this->pensja = pensja; }
Struktury Utworzenie zmiennej strukturalnej z wykorzystaniem konstruktora: osoba pracownik2("Jan","Kowalski","Gliwice", 28,4567.34);
Operacje wej/wyj Operacje wejścia/wyjścia związane są z odczytem i zapisem danych z/do pliku. Wykorzystuje się w tym celu dwa strumienie: - wejściowy (input stream – klasa ifstream) - wyjściowy (output stream – klasa ofstream). Można także użyć uniwersalnej klasy, służącej zarówno jako strumień wejściowy i wyjściowy o nazwie fstream. Działania na plikach z użyciem strumieni wymagają dołączenia biblioteki fstream.h.
Operacje wej/wyj Plik może zostać otwarty w różnych trybach. Najczęściej spotykane są: - ios::in – otwarcie pliku do odczytu, - ios::out – otwarcie pliku do zapisu, - ios::in | ios::out – otwarcie pliku jednocześnie do odczytu i zapisu, - ios::app – otwarcie pliku do dopisywania.
Operacje wej/wyj Przykład otwarcia pliku do zapisu fstream plik(”test.txt”,ios::out); if (!plik) //tutaj sprawdzamy czy plik został //poprawnie otwarty { cout << "Blad otwarcia pliku"; getch(); return 0; }
Operacje wej/wyj plik << "Ksiezyc miodem ocieka na ustach szalonych\n" "Zarloczne sa tej nocy ogrody i domy\n" "Gwiazdy do pszczol tanczacych staly się podobne\n" "Przelewa sie w altanach zlote swiatlo miodowe\n" "Bo z nieba opadajac lagodnie na ziemie\n" "W plastry miodu lacza ksiezyca promienie\n" "I skrycie mi sie roi slodka awantura\n" "Drze przed zadlem ognistym tej pszczoly \n" "Co w rece mi promieni zwodne rzucila swiatlo\n" "I swoj miod ksiezycowy zebrala z rozy wiatrow\n"; plik.close();
Operacje wej/wyj Przykład otwarcia pliku do odczytu fstream plik(”test.txt”,ios::in); if (!plik) //tutaj sprawdzamy czy plik został //poprawnie otwarty { cout << "Blad otwarcia pliku"; getch(); return 0; }
Operacje wej/wyj char linia[80]; //odczyt znak po znaku while (!plik.eof()) //eof() – sprawdza czy to już //koniec pliku { plik.getline(linia); //pobiera linie tekstu z pliku cout << linia << endl; } plik.close(); getch();