Hermetyzacja oraz pola i metody statyczne
|
|
- Paweł Jastrzębski
- 8 lat temu
- Przeglądów:
Transkrypt
1 Bogdan Kreczmer Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową.
2 Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer:
3 1 Struktury danych w języku C++ class, struct, union 2 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji 3 Hamowanie propagacji błędu 4 Zmienne globalne versus zmienne statyczne
4 Podstawowe własności class, struct, union W języku C++ istnieją trzy rodzaje definicji struktur złożonych rozpoczynających się od słów kluczowych: class, struct, union. Dwie pierwsze definiują klasę. Jednak nie każda z nich może zawierać wszystkie dostępne własności klasy. Poprzez union definiowana jest struktura specjalna (analogicznie jak w języku C). class NazwaKlasy // Domyślnie prywatna protected: private: public: ; struct NazwaKlasy // Domyślnie publiczna private: protected: public: ; union NazwaKlasy // Domyślnie publiczna private: protected: public: ;
5 Tryby dostępu class, struct, union Sekcje private, protected, public; definiują tryb dostępu do poszczególnych elementów sekcji w niej zawartych, tzn. pól i metod (w tym również konstruktora i destruktora). Ich porządek występowania w definicji nie jest ustalony. Mogą występować wielokrotnie i wzajemnie się przeplatać. końcu public. class NazwaKlasy // Domyślnie prywatna protected: private: public: private: ; private dostęp i bezpośrednie odwołanie się do pól i metod tej sekcji możliwy jest tylko z poziomu metod klasy, w której deklarowane i definiowane są te pola i metody. protected dostęp i bezpośrednie odwołanie się do pól i metod tej sekcji możliwy jest z poziomu metod klasy, w której deklarowane i definiowane są te pola i metody. Odwołanie się i bezpośredni dostęp możliwy jest również w klasie pochodnej. public nie ma żadnego ograniczenia na dostęp do pól i metod z tej sekcji.
6 class, struct, union Definicja klasy z wykorzystaniem słowa kluczowego class class definiuje klasę, która może posiadać wszystkie możliwe atrybuty klasy dostępne w języku C++, tzn. może posiadać metody, konstruktory, destruktory, metody wirtualne, pola i metody statyczne itd. Pozwala na dziedziczenie innych struktur i sama może być dziedziczona. Oprócz tego klasę definiowaną poprzez class można parametryzować tworząc w ten sposób szablony. Domyślną sekcją w definicji klasy jest zawsze sekcja private. class NazwaKlasy //Domyślnie prywatna protected: private: public: ; Przykład definicji: class LZepolona float re, im; public: float Re( ) const return re; float Im( ) const return im; void Zmien(float r, float i); ;
7 class, struct, union Definicja klasy z wykorzystaniem słowa kluczowego struct struct definiuje klasę, która może posiadać prawie wszystkie możliwe atrybuty klasy dostępne w języku C++, tzn. może posiadać metody, konstruktory, destruktory, metody wirtualne, pola i metody statyczne itd. Pozwala na dziedziczenie innych struktur i sama może być dziedziczona. Jedyne ograniczenie polega na tym, że definiowaną w ten sposób klasę nie można parametryzować, tzn. za jej pomocą nie można tworzyć szablonów. Domyślną sekcją w definicji klasy jest zawsze sekcja public. struct NazwaKlasy //Domyślnie publiczna protected: private: public: ; Przykład definicji: struct LZepolona float Re( ) const return re; float Im( ) const return im; void Zmien(float r, float i); private: float re, im; ;
8 class, struct, union Definicja klasy z wykorzystaniem słowa kluczowego union union definiuje strukturę, w której każde pole ma ten sam adres. Unia może mieć pola i metody. Nie może mieć natomiast zarówno pól statycznych, jak też metod statycznych. Nie może również posiadać konstruktorów oraz destruktora. Struktura zdefiniowana przez unię może być dziedziczona, ale nie może dziedziczyć innych struktur. Unia nie może też posiadać metod wirtualnych. Domyślną sekcją w definicji klasy jest zawsze sekcja public. union NazwaKlasy //Domyślnie publiczna protected: private: public: ; Przykład definicji: union Wartosc int Absolutna; float Wzgledna; ;
9 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. double Tab[2][2]; public : double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M. Tab[0][0] M. Tab[1][1] M. Tab[0][1] M. Tab[1][0]; Czy jest to poprawne (i dlaczego nie ;-)?
10 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. double Tab[2][2]; public : double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M. Tab[0][0] M. Tab[1][1] M. Tab[0][1] M. Tab[1][0]; Poza definicjami metod danej klasy nie można odwoływać się wprost do elementów tej klasy, które znajdują się w sekcji prywatnej. Z tego powodu odwołanie się do pola Tab obiektu M w funkcji Wyznacznik jest niedopuszczalne.
11 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. protected : double Tab[2][2]; public : double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M. Tab[0][0] M. Tab[1][1] M. Tab[0][1] M. Tab[1][0]; Jeżeli pole zadeklarowane jest w sekcji protected, to bezpośredni dostęp do tego pola poza metodami klasy jest również niemożliwy. Różnice między sekcją public, a protected pojawiają się dopiero przy dziedziczeniu. Dla pojedynczej klasy, która nie jest dziedziczona, sekcje te mają takie samo znaczenie.
12 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. double Tab[2][2]; public : double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M.Wez(0,0) M.Wez(1,1) M.Wez(0,1) M.Wez(1,0); W sekcji publicznej zdefiniowany jest interfejs do pól klasy Macierz2x2. Pozwala to zachować kontrolę nad sposobem dostępu do tych pól oraz sposobem ich udostępniania. Pozwala to również udostępnić tylko te pola, które chcemy udostępnić.
13 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. friend float Wyznacznik( const Macierz2x2 &M ); double public : Tab[2][2]; double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M. Tab[0][0] M. Tab[1][1] M. Tab[0][1] M. Tab[1][0]; Pomimo ograniczenia dostępu do pola Tab można uczynić wyjątek dla wybranych funkcji. Pozwala na to deklaracja funkcji zaprzyjaźnionych z daną klasą. Musi ona znaleźć się w obrębie definicji klasy. Miejsce wystąpienia nie jest istotne. Zwyczajowo jednak jest to początek definicji klasy.
14 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1];
15 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; Ze względu na podobieństwo klas tu jest wszystko poprawnie. Czyż nie?
16 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; Podobieństwo tych klas ma charakter subiektywny. Dla kompilatora to są tak samo różne klasy jak każde inne. Dostęp do pól prywatnych danej klasy nie jest możliwy na poziomie zarówno funkcji jak też metody innej klasy.
17 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // friend void Macierz3x3::Wstaw(Macierz2x2); float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; Dostęp do pól prywatnych staje się możliwy, gdy zaprzyjaźnimy daną metodę z klasą, do której pól prywatnych metody tej klasy mają uzyskać dostęp.
18 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. friend void Macierz3x3::Wstaw(Macierz2x2); float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //.. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; // Zaprzyjaźnienie jednej metody nie rozwiązuje problemu dostępu do pól prywatnych na poziomie innej metody tej samej klasy. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; void Macierz3x3::WstawTrans( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[1][0]; Elem[1][0] = M2. Tab[0][1]; Elem[1][1] = M2. Tab[1][1];
19 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. friend class Macierz3x3; float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //.. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; // Zaprzyjaźnienie całej klasy pozwala odwoływać się do pól prywatnych na poziomie metod klasy zaprzyjaźnionej. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; void Macierz3x3::WstawTrans( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[1][0]; Elem[1][0] = M2. Tab[0][1]; Elem[1][1] = M2. Tab[1][1];
20 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2.Wez(0,0); Elem[0][1] = M2.Wez(0,1); Elem[1][0] = M2.Wez(1,0); Elem[1][1] = M2.Wez(1,1); Zaprzyjaźnienie z klasą jest ostatecznością. O ile tylko jest to możliwe należy korzystać z metod wchodzących w skład interfejsu danej klasy.
21 Pojęcie prywatności class, struct, union class Macierz2x2 //. float Tab[2][2]; public : float Wez( int i, int j ) const return Tab[i][j]; void Zmien( float elem, int i, int j ); void Wstaw( Macierz2x2 M ); ; // void Macierz2x2::Wstaw( Macierz2x2 M ) Tab[0][0] = M. Tab[0][0]; Tab[0][1] = M. Tab[0][1]; Tab[1][0] = M. Tab[1][0]; Tab[1][1] = M. Tab[1][1]; Czy można na poziomie metody danej klasy odwoływać się do pól prywatnych obiektu tej samej klasy?
22 Pojęcie prywatności class, struct, union class Macierz2x2 //. float Tab[2][2]; public : float Wez( int i, int j ) const return Tab[i][j]; void Zmien( float elem, int i, int j ); void Wstaw( Macierz2x2 M ); ; // void Macierz2x2::Wstaw( Macierz2x2 M ) Tab[0][0] = M. Tab[0][0]; Tab[0][1] = M. Tab[0][1]; Tab[1][0] = M. Tab[1][0]; Tab[1][1] = M. Tab[1][1]; Prywatność nie jest cechą obiektu. Jest to cecha klasy.
23 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; //
24 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; // int main( ) Stos St; float Arg; if (St. Ilosc >= ROZ STOSU) / Obsługa błędu / St. TabStosu[St. Ilosc++] = 12.3;
25 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; // int main( ) Stos St; float Arg; if (St. Ilosc >= ROZ STOSU) / Obsługa błędu / St. TabStosu[St. Ilosc] = 12.3;
26 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; // int main( ) Stos St; float Arg; if (St. Ilosc <= 0) / Obsługa błędu / Arg = St. TabStosu[ St. Ilosc];
27 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; // int main( ) Stos St; float Arg; if (St. Ilosc <= 0) / Obsługa błędu / Arg = St. TabStosu[ St. Ilosc];
28 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; //
29 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; //
30 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; // float Stos::Pobierz( ) return TabStosu[ Ilosc];
31 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc];
32 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji #include <limits> using namespace std; struct Stos //.. float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc];
33 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc];
34 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz( ); if (Arg == numeric limits <float>::max()) / Obsługa błędu /
35 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz( ); if (Arg == numeric limits <float>::max()) / Obsługa błędu /
36 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz(bool & Sukces ) if ( Ilosc <= 0) Sukces = false; return numeric limits<float>::max( ); return Sukces = true, TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz(CzySukces); if (CzySukces) / Obsługa błędu /
37 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz(bool & Sukces ) if ( Ilosc <= 0) Sukces = false; return numeric limits<float>::max( ); return Sukces = true, TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz(CzySukces); if (CzySukces) / Obsługa błędu /
38 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz(bool & Sukces ) if ( Ilosc <= 0) Sukces = false; return numeric limits<float>::max( ); return Sukces = true, TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz(CzySukces); if (CzySukces) / Obsługa błędu /
39 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) Arg = St.Pobierz(CzySukces); if (CzySukces) / Obsługa błędu /
40 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
41 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0) return false; return ZeStosu = TabStosu[ Ilosc], true; Czy takie rozwiązanie pozwala w pełni zabezpieczyć się przed int main( ) błędnym pobraniem wartości ze stosu? if (St.Pobierz(Arg)) / Obsługa błędu /
42 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0 ROZ STOSU < Ilosc) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
43 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0 ROZ STOSU < Ilosc) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
44 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if (! Ilosc ROZ STOSU < Ilosc) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
45 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; unsigned int Ilosc; bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); ; //.. int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
46 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; unsigned int Ilosc; bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); ; //.. int main( ) if (St.Pobierz(Arg)) / Obsługa błędu / St. TabStosu[3] = 5; St. Ilosc;
47 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu / St. TabStosu[3] = 5; St. Ilosc;
48 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu / St. TabStosu[3] = 5; St. Ilosc;
49 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
50 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); unsigned int Ilosc( ) return Ilosc; private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
51 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); unsigned int Ilosc( ) const return Ilosc; private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
52 Reprezentacja liczby zespolonej Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji class LZespolona //. float re, im; public : float Re( ) const return re; float Im( ) const return im; float Modul( ) const return re re + im im; void ZmienRI( float re, float im) re = re; im = im; void ZmienMA( float m, float alfa) re = m cos(alfa); im = m sin(alfa); ; //. int main( ) LZespolona Z; Z.ZmienRI(2,5); cout << Modul: << Z.Modul( ) << endl;
53 Reprezentacja liczby zespolonej Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji class LZespolona //. float re, im; public : float Re( ) const return re; float Im( ) const return im; float Modul( ) const return re re + im im; void ZmienRI( float re, float im) re = re; im = im; void ZmienMA( float m, float alfa) re = m cos(alfa); im = m sin(alfa); ; //. int main( ) LZespolona Z; Z.ZmienRI(2,5); cout << Modul: << Z.Modul( ) << endl; Bezpośrednia reprezentacja części rzeczywistej i urojonej ułatwia implementację operacji dodawania i odejmowania dwóch liczb. Jednak jednocześnie utrudnia realizację operacji mnożenia, dzielenia i wyznaczania modułu.
54 Reprezentacja liczby zespolonej Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji class LZespolona // float m, alfa; // Kąt wyrażony w radianach public : float Re( ) const return m cos( alfa); float Im( ) const return m sin( alfa); float Modul( ) const return m; void ZmienRI( float re, float im) m = sqrt(re re+im im); alfa = atan2(im,re); void ZmienMA( float m, float alfa) m = m; alfa = alfa; ; // int main() LZespolona Z; Z.ZmienRI(2,5); cout << Modul: << Z.Modul( ) << endl;
55 Reprezentacja liczby zespolonej Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji class LZespolona // float m, alfa; // Kąt wyrażony w radianach public : float Re( ) const return m cos( alfa); float Im( ) const return m sin( alfa); float Modul( ) const return m; void ZmienRI( float re, float im) m = sqrt(re re+im im); alfa = atan2(im,re); void ZmienMA( float m, float alfa) m = m; alfa = alfa; ; // int main() LZespolona Z; Z.ZmienRI(2,5); cout << Modul: << Z.Modul( ) << endl; Reprezentacja trygonometryczna liczby zespolonej ułatwia implementację operacji mnożenia, dzielenia oraz wyznaczania modułu. Mimo istotnej zmiany wewnętrznej reprezentacji liczby zespolonej na zewnątrz nic się nie zmieniło.
56 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Podsumowanie: Ważniejsze cechy i własności Hermetyzacja pozwala ukryć wewnętrzne cechy implementacji danej klasy. Daje możliwość wydzielenia tej części interfejsu, która realizuje modyfikację obiektu oraz tej, która służy do odczytu stanu obiektu. Umożliwia zdefiniowanie interfejsu, który określa sposób manipulowania wewnętrznymi strukturami obiektu. Pozwala to na zapewnienie spójności wewnętrznych struktur danych. Zapobiega przypadkowej ingerencji w wewnętrzną strukturę obiektu, która mogłaby spowodować utratę spójność przechowywanych danych w obiekcie.
57 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Podsumowanie: Ważniejsze cechy i własności Hermetyzacja pozwala ukryć wewnętrzne cechy implementacji danej klasy. Daje możliwość wydzielenia tej części interfejsu, która realizuje modyfikację obiektu oraz tej, która służy do odczytu stanu obiektu. Umożliwia zdefiniowanie interfejsu, który określa sposób manipulowania wewnętrznymi strukturami obiektu. Pozwala to na zapewnienie spójności wewnętrznych struktur danych. Zapobiega przypadkowej ingerencji w wewnętrzną strukturę obiektu, która mogłaby spowodować utratę spójność przechowywanych danych w obiekcie.
58 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Podsumowanie: Ważniejsze cechy i własności Hermetyzacja pozwala ukryć wewnętrzne cechy implementacji danej klasy. Daje możliwość wydzielenia tej części interfejsu, która realizuje modyfikację obiektu oraz tej, która służy do odczytu stanu obiektu. Umożliwia zdefiniowanie interfejsu, który określa sposób manipulowania wewnętrznymi strukturami obiektu. Pozwala to na zapewnienie spójności wewnętrznych struktur danych. Zapobiega przypadkowej ingerencji w wewnętrzną strukturę obiektu, która mogłaby spowodować utratę spójność przechowywanych danych w obiekcie.
59 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Podsumowanie: Ważniejsze cechy i własności Hermetyzacja pozwala ukryć wewnętrzne cechy implementacji danej klasy. Daje możliwość wydzielenia tej części interfejsu, która realizuje modyfikację obiektu oraz tej, która służy do odczytu stanu obiektu. Umożliwia zdefiniowanie interfejsu, który określa sposób manipulowania wewnętrznymi strukturami obiektu. Pozwala to na zapewnienie spójności wewnętrznych struktur danych. Zapobiega przypadkowej ingerencji w wewnętrzną strukturę obiektu, która mogłaby spowodować utratę spójność przechowywanych danych w obiekcie.
60 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Przykład zastosowania stosu - kalkulator RPN
61 Formułowanie warunków Hamowanie propagacji błędu Licznik = 0; do ++Licznik; while (Licznik!= MAKS ILOSC); if (Licznik == MAKS ILOSC) cerr << Blad << endl;
62 Formułowanie warunków Hamowanie propagacji błędu Licznik = 0; do ++Licznik; if ( JakisWarunek ) ++Licznik; while (Licznik!= MAKS ILOSC); if (Licznik == MAKS ILOSC) cerr << Blad << endl;
63 Formułowanie warunków Hamowanie propagacji błędu Licznik = 0; do ++Licznik; if ( JakisWarunek ) ++Licznik; while (Licznik!= MAKS ILOSC); if (Licznik == MAKS ILOSC) cerr << Blad << endl;
64 Formułowanie warunków Hamowanie propagacji błędu Licznik = 0; do ++Licznik; if ( JakisWarunek ) ++Licznik; while (Licznik < MAKS ILOSC); if (Licznik >= MAKS ILOSC) cerr << Blad << endl;
65 Zmienne globalne Zmienne globalne versus zmienne statyczne #include <stdio.h> int IloscPakietow = 0; void WyslijPakiet( ) printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); WyslijPakiet( ); return 0;
66 Zmienne globalne Zmienne globalne versus zmienne statyczne #include <stdio.h> int IloscPakietow = 0; void WyslijPakiet( ) printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); WyslijPakiet( ); return 0; Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 3
67 Zmienne globalne Zmienne globalne versus zmienne statyczne #include <stdio.h> int IloscPakietow = 0; void WyslijPakiet( ) printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); WyslijPakiet( ); return 0; Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 11
68 Zmienne globalne Zmienne globalne versus zmienne statyczne #include <stdio.h> int IloscPakietow = 0; void WyslijPakiet( ) printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); return 0; Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 11
69 Zmienne lokalne Zmienne globalne versus zmienne statyczne #include <stdio.h> void WyslijPakiet( ) int IloscPakietow = 0; printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); return 0;?
70 Zmienne lokalne Zmienne globalne versus zmienne statyczne #include <stdio.h> void WyslijPakiet( ) int IloscPakietow = 0; printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); return 0; Pakiet nr: 1 Pakiet nr: 1 Pakiet nr: 1
71 Zmienne globalne versus zmienne statyczne #include <stdio.h> void WyslijPakiet( ) static int IloscPakietow = 0; printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); return 0; w języku C pełnią rolę zmiennych globalnych z ograniczonym zakresem dostępu tylko do poziomu funkcji, w której są deklarowane. Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 3
72 Zmienne globalne versus zmienne statyczne #include <iostream> void WyslijPakiet( ) static int IloscPakietow = 0; std::cout << Pakiet nr: << ++IloscPakietow << std::endl; int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); Identyczne znaczenie mają również w języku C++. Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 3
73 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz = 0; int main( ) cout << Lacze1. IloscLacz << endl; Pole statyczne pełni rolę zmiennej globalnej w ramach danej klasy. Istnieje tylko w jednym egzemplarzu niezależnie od wszystkich obiektów.
74 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz = 0; int main( ) cout << Lacze1. IloscLacz << endl; Musi być zadeklarowane oraz zainicjalizowane poza klasą w przestrzeni zmiennych globalnych. Określony zostaje w ten sposób moment jego utworzenia.
75 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) cout << Lacze1. IloscLacz << endl; Czy brak inicjalizacji oznacza wartość przypadkową?
76 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) cout << Lacze1. IloscLacz << endl; Pola statyczne typów wbudowanych zawsze inicjalizowane są wartością 0.
77 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) cout << LaczeSieciowe:: IloscLacz << endl; Do pola statycznego można odwoływać się bez konieczności tworzenia obiektu, gdyż jest ono własnością klasy, a nie obiektu.
78 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) LaczeSieciowe Lacze1, Lacze2; Dlatego też każdy z tych trzech sposobów odwołania się do pola IloscLacz jest odwołaniem się do tego samego obszaru pamięci. cout << LaczeSieciowe:: IloscLacz << endl; cout << Lacze1. IloscLacz << endl; cout << Lacze2. IloscLacz << endl;
79 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) Aby móc odwołać się do pola statycznego, nie musi istnieć żaden obiekt. Pola statyczne istnieją niezależnie od poszczególnych obiektów. cout << LaczeSieciowe:: IloscLacz << endl;
80 Koniec prezentacji
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Pola i metody statyczne
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
Wprowadzenie do szablonów klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2008-2010 Bogdan Kreczmer Niniejszy
Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this
Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE
Przesłanianie nazw, przestrzenie nazw
Przesłanianie nazw, przestrzenie nazw Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania
Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania
Rzutowanie i konwersje
Rzutowanie i konwersje Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Wprowadzenie do szablonów szablony funkcji
Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do
Wprowadzenie do szablonów szablony funkcji
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
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 uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
Referencje do zmiennych i obiektów
Referencje do zmiennych i obiektów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Programowanie obiektowe, wykład nr 6. Klasy i obiekty
Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto
Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska
Qt sygnały i sloty Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera
Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np
Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami
Operacje wejścia/wyjścia (odsłona druga) - pliki
Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały
Qt sygnały i designer
Qt sygnały i designer Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan
Programowanie 2. Język C++. Wykład 3.
3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
Wstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
Klasa, metody, rozwijanie w linii
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Materiały do zajęć VII
Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja
wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i
Praca z aplikacją designer
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2014 Bogdan Kreczmer Niniejszy dokument
Wyliczanie wyrażenia obiekty tymczasowe
Wyliczanie wyrażenia obiekty tymczasowe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Operacje wejścia/wyjścia odsłona pierwsza
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Klasa, metody, rozwijanie w linii
Klasa, metody, rozwijanie w linii Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Obiekty i metody stałe
Obiekty i metody stałe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Wprowadzenie do UML, przykład użycia kolizja
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument
Geneza C++, hermetyzacja struktur danych
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument
PARADYGMATY PROGRAMOWANIA Wykład 2
PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych
Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Konstruktor kopiujacy
Konstruktor kopiujacy Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)
Style programowania - krótki przeglad
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Schemat konstrukcja pliku Makefile
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2008 Bogdan Kreczmer Niniejszy dokument
Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.
- - uzupełnienie notatek: dr Jerzy Białkowski - - 1-2 - - - 1 #include 2 #include 3 # include 4 using namespace std ; 5 6 class Punkt { 7 8 private : 9 double
Programowanie Obiektowew języku C++ Zadania L4
Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki
Podstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Mechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Do czego służą klasy?
KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo
Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
Dziedziczenie. Ogólna postać dziedziczenia klas:
Dziedziczenie Ogólna postać dziedziczenia klas: class nazwa_clasy_pochodnej : specyfikator_dostępu nazwa_clasy_bazowej specyfikator_dostępu : public private protected Specyfikator dostępu definiuje, w
Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład V - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Programowanie obiektowe Dziedziczenie (inheritance) - mechanizm
Zaawansowane programowanie w języku C++ Klasy w C++
Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń
Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów
Szablon klasy std::vector
Szablon klasy std::vector Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat
Programowanie Obiektowew języku C++ Zadania L4
Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Języki i paradygmaty programowania
Języki i paradygmaty programowania WYDZIAŁ ELEKTRONIKI i INFORMATYKI dr inż. Robert Arsoba Politechnika Koszalińska Wydział Elektroniki i Informatyki POLITECHNIKA KOSZALIŃSKA 2009/2010 Materiały do wykładu
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Definiowanie własnych klas
Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:
Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:
Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.
wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy
i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ
W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).
Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,
referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.
Programowanie (język C++) referencje Wykład 2. Referencje (1) Referencja (odnośnik) jest zmienną identyfikującą inną zmienną. Wykonanie operacji na referencji ma taki sam skutek, jak wykonanie tejŝe operacji
KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
TEMAT : KLASY POLIMORFIZM
TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie
Szablon klasy std::list
Szablon klasy std::list Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Wstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 8 Przykład realizowany na wykładzie Klasy StringBad i String. Wstępne pliki załaczone jako źródła.
Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest
Diagramy UML, przykład problemu kolizji
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Style programowania - krótki przeglad
Style programowania - krótki przeglad Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
PARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Mechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Projektowanie klas c.d. Projektowanie klas przykład
Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej
Programowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc
Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017
PARADYGMATY PROGRAMOWANIA Wykład 3
PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na
Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej
Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,
Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:
Języki Programowania Prowadząca: dr inż. Hanna Zbroszczyk e-mail: gos@if.pw.edu.pl tel: +48 22 234 58 51 Konsultacje: piątek: 12.00 13.30 www: http://www.if.pw.edu.pl/~gos/students/jp Politechnika Warszawska
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Dziedziczenie Przestrzenie nazw Na podstawie: A.
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
Polimorfizm, metody wirtualne i klasy abstrakcyjne
Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,
Wartości domyślne, szablony funkcji i klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument
Wstęp do programowania obiektowego. Wykład 2
Wstęp do programowania obiektowego Wykład 2 1 CECHY I KONCEPCJA PROGRAMOWANIA OBIEKTOWEGO 2 Cechy programowania obiektowego Dla wielu problemów podejście obiektowe jest zgodne z rzeczywistością (łatwe
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
JAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy
2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać
Język C++ wykład VIII
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Podstawy algorytmiki i programowania - wykład 4 C-struktury
1 Podstawy algorytmiki i programowania - wykład 4 C-struktury Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy
Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody
Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej
Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
KLASY cz.1. Dorota Pylak
KLASY cz.1 Dorota Pylak Do czego służą klasy? 2 W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można
Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)
Podstawy programowania (język C) Globalne / Lokalne Wykład 15. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Zmienne globalne / lokalne (1) int A, *Q; // definicja zmiennych globalnych
Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)
Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this
Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.
Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie
Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;
Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze
Laboratorium 1 - Programowanie proceduralne i obiektowe
Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?