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)