Pola i metody statyczne

Podobne dokumenty
Referencje do zmiennych i obiektów

Wyliczanie wyrażenia obiekty tymczasowe

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Wprowadzenie do szablonów szablony funkcji

Przesłanianie nazw, przestrzenie nazw

Obiekty i metody stałe

Wprowadzenie do szablonów szablony funkcji

Konstruktor kopiujacy

Operacje wejścia/wyjścia odsłona pierwsza

Lista dwukierunkowa - przykład implementacji destruktorów

Szablon klasy std::vector

Operacje wejścia/wyjścia (odsłona druga) - pliki

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Szablon klasy std::list

Wprowadzenie do szablonów klas

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Rzutowanie i konwersje

Hermetyzacja oraz pola i metody statyczne

Szablony funkcji i szablony klas

Podejście obiektowe - podstawowe pojęcia

Style programowania - krótki przeglad

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Praca z aplikacją designer

Qt sygnały i designer

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Programowanie komputerowe. Zajęcia 7

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Wykład 8: klasy cz. 4

Język C++ zajęcia nr 2

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Geneza powstania języka C++

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Style programowania - krótki przeglad

Geneza powstania języka C++

Schemat konstrukcja pliku Makefile

TEMAT : KLASY POLIMORFIZM

Programowanie, część I

Programowanie Obiektowew języku C++ Zadania L4

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Plik klasy. h deklaracje klas

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Wstęp do Programowania 2

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 9: Polimorfizm i klasy wirtualne

Programowanie obiektowe w języku

Mechanizm dziedziczenia

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie obiektowe

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Podstawy Programowania Obiektowego

Wykład 4: Klasy i Metody

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Mechanizm dziedziczenia

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Wykład 5: Klasy cz. 3

Enkapsulacja, dziedziczenie, polimorfizm

Funkcje i klasy zaprzyjaźnione

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie 2. Język C++. Wykład 3.

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Programowanie Obiektowe i C++

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Do czego służą klasy?

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

PARADYGMATY PROGRAMOWANIA Wykład 4

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

ZASADY PROGRAMOWANIA KOMPUTERÓW

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Przykład implementacji przeciażeń operatorów problem kolizji

Transkrypt:

Pola i metody statyczne Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2009 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

Zmienne statyczne #include <stdio.h> void FunkcjaZPamiecia( ) static int IloscWywolan = 0; printf( Wywolanie nr: %i\n,++iloscwywolan); printf( Wartosc poczatkowa: %i\n, FunkcjaZPamiecia( ); FunkcjaZPamiecia( ); FunkcjaZPamiecia( ); return 0; IloscWywolan); Wynik działania programu (po usunięciu pierwszej instrukcji): Wywolanie nr: 1 Wywolanie nr: 2 Wywolanie nr: 3 Zmienne statyczne w języku C pełnia rolę zmiennych globalnych z ograniczonym zakresem dostępu tylko do poziomu funkcji, w której sa deklarowane. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 1

class PrzykladKlasy...................................... static int IloscObiektow; PrzykladKlasy( ) ++ IloscObiektow; PrzykladKlasy( ) IloscObiektow; ;........................................................... int PrzykladKlasy :: IloscObiektow = 0; PrzykladKlasy Ob; cout << Ob. IloscObiektow << endl; cout << PrzykladKlasy :: IloscObiektow << endl; Pole statyczne pełni rolę zmiennej globalnej w ramach danej klasy. Istnieje tylko w jednym egzemplarzu niezależnie od wszystkich obiektów. Musi być zadeklarowane oraz zainicjalizowane poza klasa w przestrzeni zmiennych globalnych. Określony zostaje w ten sposób moment jego utworzenia. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 2

class PrzykladKlasy //.................................... static int IloscObiektow; PrzykladKlasy( ) ++ IloscObiektow; PrzykladKlasy( ) IloscObiektow; ; //.......................................................... int PrzykladKlasy :: IloscObiektow = 0; cout << PrzykladKlasy :: IloscObiektow << endl; Pole statyczne jest całkowicie niezależne od tego, czy jakieś obiekty klasy, do której ono należy, istnieja czy też nie. Zawsze można do niego odwołać się, o ile jest zezwolenie na dostęp do tegoż pola. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 3

class PrzykladKlasy //.................................... static int IloscObiektow; PrzykladKlasy( ) ++ IloscObiektow; PrzykladKlasy( ) IloscObiektow; ; //.......................................................... int PrzykladKlasy :: IloscObiektow = 0; PrzykladKlasy Ob; cout << Ob. IloscObiektow << endl; cout << PrzykladKlasy :: IloscObiektow << endl; Pole statyczne może być zadeklarowane tylko i wyłacznie w przestrzeni zmiennych globalnych. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 4

class PrzykladKlasy //.................................... static int IloscObiektow; PrzykladKlasy( ) ++ IloscObiektow; PrzykladKlasy( ) IloscObiektow; ; //.......................................................... PrzykladKlasy ObGlobalny; int PrzykladKlasy :: IloscObiektow = 0; PrzykladKlasy Ob; cout << Ob. IloscObiektow << endl; cout << PrzykladKlasy :: IloscObiektow << endl; Obiekt może być deklarowany przed deklaracja pola statycznego klasy, do której należy ten obiekt. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 5

class PrzykladKlasy //...................................................... static int IloscObiektow; PrzykladKlasy( ) ++ IloscObiektow; PrzykladKlasy( ) IloscObiektow; int RozmiarObiektow( ) return IloscObiektow sizeof(przykladklasy); ; //........................................................................... int PrzykladKlasy :: IloscObiektow = 0; PrzykladKlasy Ob; cout << Ob.RozmiarObiektow( ) << endl; Na poziomie metod klasy, w której zdefiniowane sa pola statyczne, do pól tych odwołujemy się w identyczny sposób jak do zwykłych pól klasy. Można też użyć pełnej nazwy kwalifikowanej tego pola. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 6

Metoda statyczna class PrzykladKlasy //...................................................... static int IloscObiektow; PrzykladKlasy( ) ++ IloscObiektow; PrzykladKlasy( ) IloscObiektow; static int RozmiarObiektow( ) return IloscObiektow sizeof(przykladklasy); ; //........................................................................... int PrzykladKlasy :: IloscObiektow = 0; cout << PrzykladKlasy ::RozmiarObiektow( ) << endl; Podobnie jak w przypadku pola statycznego przy wywołaniu metody statycznej nie musimy korzystać z obiektu klasy, dla której jest zdefiniowana ta metoda. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 7

#define ROZMIAR TAB 100 class KlasaTestowa //.............................. static int Tab[ROZMIAR TAB]; int Pole1, Pole2; ; //.................................................... int KlasaTestowa:: Tab[ROZMIAR TAB]; int main() KlasaTestowa ObTestowy; cout << cout << Rozmiar(int ): << sizeof(int ) << endl; Rozmiar(KlasaTestowa): << sizeof(obtestowy) << endl; cout << Rozmiar(KlasaTestowa:: Tab): << sizeof(klasatestowa:: Tab) << endl; Bezpośrednio w skład obiektu wchodza tylko jego zwykłe pola. Tak więc to ich rozmiar decyduje o rozmiarze obiektu. Pola statyczne nie wpływaja na jego wielkość. Przykład działania: Rozmiar(int): 4 Rozmiar(KlasaTestowa): 8 Rozmiar(KlasaTestowa:: Tab): 400 Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 8

class KlasaTestowa _Tab: Pole1: Pole2: int KlasaTestowa::_Tab[10] int main() KlasaTestowa Pole1: Pole2: Bezpośrednimi składnikami obiektu decydujacym o jego rozmiarze sa tylko pola zwykłe. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 9

Podsumowanie Pola statyczne powinny reprezentować ogólne atrybuty właściwe dla wszystkich obiektów całej klasy. Pola statyczne nie powinny być wykorzystywane jako zmienne robocze lub zmienne służace do przekazywania wyników pośrednich między metodami. Komunikacja między metodami powinna być realizowana, o ile jest to tylko możliwe, poprzez parametry wywołania. Pola statyczne powinny być tworzone możliwie oszczędnie. Nadużywanie tego mechanizmu świadczy zazwyczaj o złym stylu programowania. Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 10

Pytania i ćwiczenia 1. Dana jest definicja klasy oraz deklaracje: class KlasaA int PoleZwykle; static int PoleStatyczne; ; KlasaA() PoleZwykle = 0; KlasaA Ob; int KlasaA:: PoleStatyczne = Ob. PoleZwykle; Czy powyższa deklaracja jest poprawna? 2. Dana jest definicja klasy oraz deklaracje: class KlasaA static int Pole; int Wartosc(); ; int KlasaA::Wartosc( ) return KlasaA:: Pole; int KlasaA:: Pole; Czy powyższa definicja metody jest poprawna? Copyright c 2005 2009 Bogdan Kreczmer Pola i metody statyczne 11