C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.

1 C++ mgr inż. Tomasz Turba Politechnika Opolska 2016 ...
Author: Renata Turek
0 downloads 2 Views

1 C++ mgr inż. Tomasz Turba Politechnika Opolska 2016

2 Zajęcia [19.04.2016]  Klasy i obiekty  Korzystanie  Prawa dostępu  Metody  Korzystanie i statyka  Konstruktor / destruktor  ->THIS!

3 Klasa  Klasa = lepsza organizacja kodu złożonego z typów, zmiennych, funkcji, etc.  Klasa jest jak pudełko w którym zamykamy składowe  Klasa ~~ struktura = TYP DANYCH Definicja: class NAZWA_KLASY { //typy, instrukcje } ; Użycie: NAZWA_KLASY nazwa_zmiennej; //znajomy widok? == OBIEKT!

4 Korzystanie z klasy  Różnicą względem struktury jest prawo dostępu! (domyślnie – PRIVATE!)  PRIVATE  zmienne i funkcje tylko do użycia w klasie  PROTECTED  zmienne dziedziczone do innej klasy  PUBLIC  dostęp do składowych klasy z dowolnego miejsca kodu

5 #include class NAZWA_KLASY { int prywatne1; //domyślny PRIVATE public: //w dół PUBLIC int publiczne1; int publiczne2; protected: //w dół PROTECTED int chronione1; int chronione2; private: int prywatne2; public: int publiczne3; protected: int chronione3, chronione4; }; int main() { NAZWA_KLASY obiekt; obiekt.publiczne1 = 1; //GIT! obiekt.chronione1 = 1; //BŁĄD obiekt.prywatne1 = 1; //BŁĄD }

6 Metoda  Metoda = funkcja w klasie (powiązana z klasą)  Obowiązują uprawnienia! Definicja: class NAZWA_KLASY { void metodaprv(); //deklaracja w klasie public: int metodapub(int x) //definicja w klasie { return x; } }; Wywołanie metody: NAZWA_KLASY obiekt; obiekt.metodapub(1); obiekt.metodaprv(); //BŁĄD!

7 #include class Klasa { int MojInt; public: void Set(int n); int Get(); }; void Klasa::Set(int n) { MojInt = n; } int Klasa::Get() //wywołanie poza klasą { return MojInt; } int main() { Klasa k; k.Set(5); std::cout

8 Zmienne i metody statyczne #include class Klasa { static int wspolne; public: void metoda() { std::cout

9 Konstruktor  Konstruktor = funkcja w klasie (metoda), zawsze tworzona (nawet niejawnie)  Musi mieć nazwę identyczną jak nazwa klasy; nie może nic zwracać (!)  Chcemy aby każdy obiekt klasy Miesiąc po jej utworzeniu generował tablicę dni tygodnia w zależności od miesiąca i roku Klasycznie: class Miesiac { public: int dni[31]; int liczbaDni; string nazwa; Miesiac(int numer, int rok);//deklaracja konstruktora }; Miesiac::Miesiac(int numer, int rok)//definicja konstruktora { // instrukcje … }

10 Tworzenie konstruktora Klasycznie: Miesiac styczen2000(1, 2000); Wskaźnikowo: Miesiac* styczen2000 = new Miesiac(1, 2000); Instrukcje inicjujące: Rok() : miesiace(new Miesiac[12]), liczbaDni(7) { instrukcje… } Kopiująco (referencja na stały obiekt): Miesiac miesiac(12, 2005); Miesiac kopia(miesiac);

11 Destruktor  Zniszczenie konstruktora, dealokacja pamięci z obiektów, klas  There can be only one! class Klasa { Klasa(); //konstruktor ~Klasa();//destruktor };

12 #include class Test { public: Test() { std::cout

13 This ->  Wskazanie na obiekt dla którego została wywowałana metoda (nie dotyczy statycznych metod!) #include class Klasa { public: void Metoda() { std::cout

14 This -> #2 class Klasa { int x; public: void Metoda(int x) { this->x = x; //Do x z klasy przypisujemy argument x } }; Uzupełnij kodem z góry i dołu.

15 Zadanie domowe  Przerób program strukturalny (zad. 5) na w pełni obiektowy program klasowy [5pkt]  Podpowiedź: podpowiedz.cpp © c0x.pl – proszę przeanalizować i zmodyfikować.  Obowiązują te same „funkcje” – sortowania  BEZ OBSŁUGI PLIKOWEJ (chyba, że ktoś chce być pr0 +1pkt)