Rzutowanie i konwersje

Save this PDF as:
 WORD  PNG  TXT  JPG

Wielkość: px
Rozpocząć pokaz od strony:

Download "Rzutowanie i konwersje"

Transkrypt

1 Rzutowanie i konwersje Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 Copyright c 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.

2 Domyślne konwersje typów struct Wektor2f // float x, y; Wektor2f( float x=0, float y=0 ): x(x), y(y) ; // struct LZespolona // float re, im; LZespolona( ): re( ), im( ) // W ten sposób pola re i im będa miały wartość 0. ; // void Funkcja dla Wektora( Wektor2f const & W )... LZespolona Z; Wektor2f W = Z; Funkcja dla Wektora( Z );... //Tu jest bład. Brak zgodności typów. //Tu także jest bład z tego samego powodu. Ze względu na wymóg statycznej zgodności typów powyższe operacje sa niepoprawne. Niezgodności typów wykrywane sa w trakcie kompilacji. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 1

3 Domyślne konwersje typów... struct Wektor2f // float x, y; Wektor2f( LZespolona const& Z ); // Ten konstruktor umożliwia konwersje typów. Wektor2f( float x=0, float y=0 ): x(x), y(y) ; // Wektor2f::Wektor2f( LZespolona const& Z ): x(z. re ), y(z. im ) void Funkcja dla Wektora( const Wektor2f & W )... LZespolona Z; Wektor2f W = Z; // Tu jest dobrze gdyż możliwa jest niejawna konwersja. Funkcja dla Wektora( Z );... // Tu jest dobrze. Dodatkowy konstruktor daje przepis jak z obiektu klasy Wektor2f stworzyć obiekt klasy LZespolona. Dlatego kompilator może sam rozwiazać napotkany problem niezgodności typów. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 2

4 Bezpieczne rzutowanie struct Wektor2f // float x, y; Wektor2f( const LZespolona & Z ); // Ten konstruktor umożliwia konwersje typów. Wektor2f( float x=0, float y=0 ): x(x), y(y) ; // Wektor2f::Wektor2f( const LZespolona & Z ): x(z. re ), y(z. im ) LZespolona Z; Wektor2f W1 = Z; // Tu jest dobrze gdyż możliwa jest niejawna konwersja. Wektor2f W2 = Wektor2f(Z); // Jawna konwersja poprzez wywołanie konstruktora. Wektor2f W3 = static cast<wektor2f>(z); // Jawna konwersja poprzez bezpieczne rzutowanie. Rzutowanie typu obiektu można dokonać w sposób jawny i bezpieczny za pomoca operatora static cast. Stosowanie tego operatora jest zalecane zamiast realizacji niejawnych rzutowań. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 3

5 Domyślne konwersje typów struct Wektor2f // float x, y; explicit Wektor2f( LZespolona const& Z ); // Znowu zmiana Wektor2f( float x=0, float y=0 ): x(x), y(y) ; // Wektor2f::Wektor2f( LZespolona const& Z ): x(z. re ), y(z. im ) void Funkcja dla Wektora( const Wektor2f & W )... LZespolona Z; Wektor2f W = Z; // Tu jest źle gdyż niejawna konwersja jest teraz zabroniona. Funkcja dla Wektora( Wektor2f( Z ) ); Funkcja dla Wektora( static cast<wektor2f>( Z ) ); // Tu jest dobrze, gdyż konwersja jest wykonana w sposób jawny. // Najlepszy sposób, konwersja poprzez jawne rzutowanie. Niejawna konwersja nie zawsze jest pożadana. Czasami może być źródłem błędów bardzo trudnych do wykrycia. Słowo kluczowe explicit pozwala zabronić niejawnych wywołań wybranych konstruktorów, tym samym konwersji z zastosowaniem tego konstruktora. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 4

6 Konwertery struct Wektor2f // float x, y; Wektor2f( float x=0, float y=0 ): x(x), y(y) ; // struct LZespolona // float re, im; operator Wektor2f ( ) return Wektor2f( re, im); // Deklaracja i implementacja konwertera ; // void Funkcja dla Wektora( const Wektor2f & W )... LZespolona Z; Wektor2f W = Z; // Konwersje moga wykonywać się niejawnie Funkcja dla Wektora( (Wektor2f ) Z ); // lub też można je wykonywać w sposób jawny (w stylu C) Funkcja dla Wektora( static cast<wektor2f>( Z ) ); // Najlepszy sposób, konwersja poprzez jawne rzutowanie. Operatory konwersji dostarczaja bardziej ogólnego mechanizmu przekształcania typu niż konstruktory. Dla konwerterów nie można zabronić konwersji domyślnych. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 5

7 Konwertery struct Wektor2f // float x, y; Wektor2f( float x=0, float y=0 ): x(x), y(y) ; // struct LZespolona // float re, im; operator Wektor2f ( ) return Wektor2f( re, im); // Deklaracja i implementacja konwertera ; // void Fun Zmieniajaca Wek( Wektor2f &W )... LZespolona Z; Fun Zmieniajaca Wek( Z ); // Tu nie może być już zastosowany konwerter do klasy Wektor2f, gdyż w tym... // przypadku potrzebna jest konwersja do typu Wektor2f&. Wymaganie ścisłej zgodności typów zapobiega błędnym domyślnym użyciom konwerterów. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 6

8 Konwertery struct Wektor2f // float x, y; Wektor2f( float x=0, float y=0 ): x(x), y(y) ; // struct LZespolona // float re, im; operator Wektor2f & ( ) Wektor2f W( re, im); return W; // Błędna implementacja ; // void Fun Zmieniajaca Wek( Wektor2f &W )... LZespolona Z; Fun Zmieniajaca Wek( Z );... // Tu byłoby już wszystko dobrze gdyby konwerter był poprawnie zaimplementowany. Wszystkie uwagi odnoszace się do zwracanych wartości (obiektów, referencji itd.) przez metody odnosza się również do konwerterów. Konwerter do referencji danej klasy nie może zwracać referencji do obiektu lokalnego. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 7

9 Konwertery struct Wektor2f float x, y; ; // struct LZespolona // Wektor2f Wek; float & re, & im; LZespolona( ): re( Wek. x ), im( Wek. y ) operator Wektor2f & ( ) return Wek; // Deklaracja konwertera ; // void Fun Zmieniajaca Wek( Wektor2f &W )... LZespolona Z; Wektor2f W = Z; // Podstawienie jest poprawne dzięki niejawnej konwersji. Z = W; static cast<wektor2f &>(Z) = W; Fun Zmieniajaca Wek( Z );... // To podstawienie jest błędne. Nie jest możliwa domyślna konwersja po prawej stronie operatora. // Tutaj jest już wszystko dobrze. // Dzięki konwerterowi przekazanie parametru jest poprawne. Konwersja do referencji musi odnosić się do obiektu znajdujacego się w obrębie zakresu definicji danego konwertera (dotyczy to ogólnie wszystkich metod i funkcji). Copyright c Bogdan Kreczmer Rzutowanie i konwersje 8

10 Konwertery struct LZespolona // float x, y; operator float ( ) const return x x + y y; ; // int main() LZespolona Z; float d = Z; // To jest poprawne dzięki domyślnej konwersji do float. if ( Z ) cout << Różne od zera << endl; // To także jest poprawne. d = d + Z - 5; // Konwersja w tym miejscu być może nie jest pożadana w przypadku,... // gdy zmienna Z użyto przez pomyłkę. Nad- Operatory konwersji zapewniaja konwersję danej klasy do dowolnego typu wbudowanego. mierne korzystanie z tego mechanizmu może jednak być niebezpieczne. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 9

11 Konwertery struct LZespolona // float x, y; operator float ( ) const return x x + y y; operator bool( ) const return x y; ; // int main() LZespolona Z; float d = Z; // To jest poprawne dzięki domyślnej konwersji do float. if ( Z ) cout << Różne od zera << endl; // Teraz jest tu użyta konwersja do typu bool. d = d + Z - 5; d = d + static cast<float>(z) - 5;... // W tym przypadku konwersja staje się niejednoznaczna dlatego wyrażenie to nie jest akceptowalne. // Należy dokonać jawnej konwersji aby wszystko było dobrze. Zdefiniowanie konwersji do kilku typów podstawowych może prowadzić do niejednoznaczności. Może to być pożyteczne, gdyż zabezpiecza przed przypadkowym użyciem danej zmiennej w innym kontekście. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 10

12 Konwertery Zapis operacji odczytu z cin można znacznie uprościć. Jest to możliwe dzięki temu, że dla klasy std::istream przeciażenie operatora >> zwraca referencję do std::istream (obiekt zwraca referencję do samego siebie) oraz zdefiniowany jest operator konwersji do typu void*, który zwraca zanegowany wynik metody fail. float d; do cin >> d; if ( cin.fail( ) ) break ;... while (true); = float d; while (!(cin >> d).fail( ) )... float d; while (cin >> d) // Wykonuj dopóki poprawnie... // odczytasz wartość typu float Copyright c Bogdan Kreczmer Rzutowanie i konwersje 11

13 Czytanie z pliku #include <iostream> #include <fstream> using namespace std; #include <iostream> #include <fstream> using namespace std; ifstream char Strm; Znak; ifstream Strm( plik.txt ); char Znak; Strm.open( plik.txt ); if (!Strm.is open( ) ) return 1; Strm >> noskipws >> Znak; while ( Strm.good( ) ) cout << Znak; Strm >> Znak; Strm.close( ); if (!Strm ) return 1; Strm >> noskipws; while ( Strm >>Znak ) cout << Znak; Zdefiniowany konwerter do typu void oraz przeciażenie operatora! pozwalaja uprościć zapis operacji sprawdzania stanu strumienia. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 12

14 Operatory rzutowania const cast rzutowanie usuwajace modyfikatory const oraz volatile. Całość konwersji realizowana jest przez kompilator. Rzutowanie to należy do rzutowań bezpiecznych. static cast używany do zdefiniowanych przez użytkownika, standardowych lub niejawnych konwersji typów. Całość konwersji realizowana jest przez kompilator. Rzutowanie to należy do rzutowań w zasadzie bezpiecznych. reinterpret cast jest najbardziej niebezpiecznym rzutowaniem. Wykonuje on konwersję między wskaźnikami oraz wskaźnikami i liczbami. Źle przeprowadzone rzutowanie może być źródłem błędów trudnych do wykrycia. dynamic cast obsługuje tylko obiekty klas polimorficznych. Zapewnia realizację rzutowania w górę. Rzutowanie to należy do rzutowań bezpiecznych. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 13

15 Operator const cast< > class LZespolona // public : float re, im; void Zmien( float re, float im ) re = re; im = im; float Re( ) const return re; float Im( ) const return im; ; // const LZespolona LZespolona StaleZ; ZmienZ; const cast<lzespolona&>(stalez).zmien(2,3); const cast<lzespolona>(stalez).zmien(2,3); const cast<const LZespolona&>(ZmienZ).Re( ); Rzutowanie z wykorzystaniem operatora const cast może być tylko rzutowaniem na wskaźnik lub referencję. Może ono usuwać lub dodawać modyfikator const. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 14

16 const int Stala = 5; volatile int ZmUlotna; const cast<int &>(Stala) = 5; const cast<int &>(ZmUlotna) = 5; Operator const cast< > const cast<const int &>(ZmUlotna) = 5; const cast<volatile int &>(Stala) = 5; const cast< int >(ZmUlotna) = 5; const char Tab[ ] = łódka ; const cast<char >( Tab )[ 0 ] = w ; const cast<char >( Tab ) = w ; Przy rzutowaniu za pomoca const cast sa te same zasady do modyfikator const jak też modyfikatora volatile. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 15

17 unsigned int ZmBezZnaku = 5; int ZmZeZnakiem = 50; Operator static cast< > ZmBezZnaku = static cast<unsigned int >(ZmZeZnakiem); static cast<int &>(ZmBezZnaku) = ZmZeZnakiem; static cast<int >(ZmBezZnaku) = ZmZeZnakiem; double ZmDouble = numeric limits<double >::max( ); float ZmFloat = static cast<float >(ZmDouble); cout << ZmDouble: << ZmDouble << endl; cout << ZmFloat: << ZmFloat << endl; cout << ZmBezZnaku: << ZmBezZnaku << endl; Wynik działania: ZmDouble: e+308 ZmFloat: inf ZmBezZnaku: W przypadku typów wbudowanych nie można rzutować na referencję. Jest to możliwe w przypadku klas, dla których zdefiniowane zostały odpowiednie konwertery. Jeżeli rzutowanie realizowane jest na wartość, to produkt rzutowania nie jest l-wartościa. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 16

18 int ZmInt = 32111; double ZmDouble = ZmInt; Operator static cast< > ZmDouble = ZmInt; ZmDouble = static cast <double >(ZmInt); ZmDouble = 6.25; ZmInt = ZmDouble; ZmInt = static cast <int >(ZmDouble); // Domyślne rzutowanie // Rzutowanie jawne // Tu kompilator będzie ostrzegał // Tu już nie cout << ZmInt: << ZmInt << endl; Wynik kompilacji: PRG> g++ konwersja.cpp konwersja.cpp: In function int main() : konwersja.cpp:7: warning: converting to int from double Wynik działania: ZmInt: 6 W przypadku rzutowań stratnych należy rzutowania dokonywać w sposób jawny. W ten sposób eliminujemy zbędne komunikaty i poprawiamy czytelność programu. Nie wszystkie kompilatory domyślnie ostrzegaja przed stratnymi rzutowaniami. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 17

19 Operator static cast< > short int ZmSInt Pomocnicza = 5; short int ZmSInt = 32111; double ZmDouble = ZmSInt; void wzm = &ZmSInt; static cast <double >(wzm) = ZmDouble; short int wzmsint = &ZmSInt; static cast <double >(wzmsint) = ZmDouble; // To kompilator wykryje cout << ZmSInt Pomocnicza: << ZmSInt Pomocnicza << endl; cout << ZmSInt << ZmSInt << endl; cout << ZmDouble: << ZmDouble << endl; Wynik działania: ZmSInt Pomocnicza: 0 ZmSInt: 0 ZmDouble: Wykorzystywanie wskaźników na typ void może prowadzić do bardzo niebezpiecznych konstrukcji. Z tego względu należy unikać tego typu rozwiazań. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 18

20 Operator reinterpret cast< > class KlasaInt2 // public : int Pole1, Pole2; ; // KlasaInt2 Ob; int Zm = 30; Ob. Pole1 = 100; Ob. Pole2 = 200; int Tab = reinterpret cast <int >(&Ob); cout << Tab[0]: << Tab[0] << endl; cout << Tab[1]: << Tab[1] << endl; KlasaInt2 &ZlyOb = reinterpret cast <KlasaInt2 &>(Zm); cout << ZlyOb. Pole1: << ZlyOb. Pole1 << endl; cout << ZlyOb. Pole2: << ZlyOb. Pole2 << endl; Wynik działania: Tab[0]: 100 Tab[1]: 200 ZlyOb. Pole1: 30 ZlyOb. Pole2: 100 Stosowanie operatora reinterpret cast daje możliwości swobodnego manipulowania organizacja pamięci. Jednak stwarza to potencjalnie duże niebezpieczeństwo wystapienia bardzo poważnych błędów. Powoduje również, że program zazwyczaj staje się nieprzenośny. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 19

21 Rzutowanie w górę Rzutowanie w górę jest rzutowaniem na klasę bazowa. Tego typu rzutowanie zawsze się powiedzie, gdyż obiekt klasy pochodnej musi zawierać podobiekt klasy bazowej. Z tego powodu rzutowanie to może być realizowane niejawnie. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 20

22 Operator dynamic cast< > class KlasaBazowa // public : virtual KlasaBazowa( ) ; // class KlasaPochodna: public KlasaBazowa ; // KlasaBazowa KlasaPochodna wobbazo; ObPoch; KlasaBazowa &ObBazo = ObPoch; // Niejawne rzutowanie referencji wobbazo = &ObPoch; wobbazo = dynamic cast<klasabazowa >(&ObPoch); // Jawne rzutowanie w górę Rzutowanie w górę jest rzutowaniem całkowicie bezpiecznym. Rzutowanie to może odnosić się zarówno do wskaźników jak też do referencji. Może być również wykonywane niejawne na parametrach wywołania funkcji lub metod. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 21

23 Niejawne rzutowanie w górę class KlasaBazowa // public : virtual KlasaBazowa( ) ; // class KlasaPochodna: public KlasaBazowa ; // void Funkcja( KlasaBazowa & Ob )... KlasaPochodna Funkcja( ObPoch ); ObPoch; // Tu następuje niejawne rzutowanie w górę. W przypadku parametrów wywołania funkcji lub metod niejawne rzutowanie w górę realizowane jest niezależnie od tego czy parametry te sa modyfikowalne, czy też nie. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 22

24 Rzutowanie w dół Rzutowanie w dół jest rzutowaniem na klasę pochodna. Ze względu na to, że obiekt klasy bazowej nie zawsze musi być składnikiem obiektu klasy pochodnej (np. może występować samodzielnie), rzutowanie to może się nie powieść. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 23

25 Operator dynamic cast< > class KlasaBazowa // public : virtual KlasaBazowa( ) ; // class KlasaPochodna: public KlasaBazowa ; // KlasaBazowa KlasaPochodna ObBazo, wobbazoa = &ObBazo, wobbazob; ObPoch, wobpoch; wobbazob = &ObPoch; KlasaPochodna &robpoch = dynamic cast <KlasaPochodna&>( wobbazob); wobpoch = dynamic cast <KlasaPochodna >(wobbazob); cout << Adres: << wobpoch << endl; wobpoch = dynamic cast <KlasaPochodna >(wobbazoa); cout << Adres: << wobpoch << endl; Wynik działania: Adres: 0xbf9c0880 Adres: 0 Wykonujac rzutowanie w dół jeśli obiekt klasy bazowej nie jest częścia składowa obiektu klasy pochodnej, w przypadku rzutowania wskaźnika otrzymywany jest adres NULL, zaś w przypadku rzutowania referencji zgłaszany jest wyjatek bad cast. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 24

26 Operator dynamic cast< > class KlasaBazowa // public : virtual KlasaBazowa( ) ; // class KlasaPochodna: public KlasaBazowa ; // KlasaBazowa ObBazo, wobbazoa = &ObBazo, wobbazob; KlasaPochodna ObPoch, wobpoch; wobbazob = &ObPoch; wobpoch = dynamic cast <KlasaPochodna >(wobbazob); cout << Adres: << wobpoch << endl; wobpoch = static cast <KlasaPochodna >(wobbazob); cout << Adres: << wobpoch << endl; wobpoch = static cast <KlasaPochodna >(wobbazoa); cout << Adres: << wobpoch << endl; Wynik działania: Adres: 0xbfa48210 Adres: 0xbfa48210 Adres: 0xbfa48230 Wykorzystanie operatora dynamic cast wiaże się z dodatkowym narzutem. Zastosowanie w takich przypadkach operatora static cast daje bardziej efektywny kod, jednak jest bardziej niebezpieczne. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 25

27 Podsumowanie Operatory konwersji wraz z innymi operatorami dostarczaja bardzo silnego mechanizmu, który pozwala traktować klasy definiowane przez programistę na równi z typami wbudowanymi. Nadużywanie mechanizmu domyślnych konwersji jest potencjalnie bardzo niebezpieczne, gdyż może prowadzić do błędów, które sa bardzo trudno wykrywalne. Moga one prowadzić do utraty kontroli nad przebiegiem obliczeń. Z tych powodów należy: definiować operatory konwersji tylko dla sytuacji jasno określonych nie prowadzacych do dwuznacznych interpretacji, tzn. sytuacji, w których czasami konwersja domyślna może być pożadana, zaś w innych nie. wprowadzona domyślna konwersja nie powinna powodować znaczacego zwiększenia przypadkowych podstawień. w przypadku definiowania konstruktorów jednoargumentowych, które nie sa przewidziane do konwersji typów, należy je definiować jako explicit. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 26

28 1. Dany jest fragment kodu: Pytania i ćwiczenia struct Wektor2f float x, y; Wektor2f(float w): x(w), y(w) operator float () const return x x + y y; Wektor2f operator + (Wektor2f W) const W. x += x; W. y += y; return W; ; Wektor2f Wek(2); float Liczba = 1; Liczba = 2 + Wek Liczba;... (a) Jaka będzie wartość zmiennej Liczba po wykonaniu powyższego wyrażenia arytmetycznego? (b) Które z metod klasy Wektor2f i ile razy zostana uruchomione w trakcie wyliczania tego wyrażenia? (c) Czy wystapi niejawne wywołanie konstruktora klasy Wektor2f? 2. Dla przykładu jak powyżej rozważmy zamiast wcześniej przedstawionego wyrażenia, wyrażenie: Liczba += Wek = 2 + Wek Liczba; Należy odpowiedzieć na pytania przedstawione w poprzednim punkcie. Copyright c Bogdan Kreczmer Rzutowanie i konwersje 27

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

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

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

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

Bardziej szczegółowo

Wyliczanie wyrażenia obiekty tymczasowe

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

Bardziej szczegółowo

Referencje do zmiennych i obiektów

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

Bardziej szczegółowo

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji Wartości domyślne, przeciażenia funkcji 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.

Bardziej szczegółowo

Pola i metody statyczne

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

Bardziej szczegółowo

Szablon klasy std::vector

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

Bardziej szczegółowo

Szablony funkcji i szablony klas

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

Bardziej szczegółowo

Konstruktor kopiujacy

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

Bardziej szczegółowo

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 na temat programowania obiektowego.

Bardziej szczegółowo

Klasa, metody, rozwijanie w linii

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

Bardziej szczegółowo

Lista dwukierunkowa - przykład implementacji destruktorów

Lista dwukierunkowa - przykład implementacji destruktorów Lista dwukierunkowa - przykład implementacji destruktorów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2008 Bogdan Kreczmer Niniejszy dokument zawiera

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

Bardziej szczegółowo

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ść 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

Bardziej szczegółowo

Hermetyzacja oraz pola i metody statyczne

Hermetyzacja oraz pola i metody statyczne Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2010 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Obiekty i metody stałe

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

Bardziej szczegółowo

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 Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp do Programowania 2

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:

Bardziej szczegółowo

Wprowadzenie do szablonów klas

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

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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,

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

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ą

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Dziedziczenie i poliformizm

Dziedziczenie i poliformizm Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2016 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

Język C++ wykład VIII

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,

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

Identyfikacje typu na etapie. wykonania (RTTI)

Identyfikacje typu na etapie. wykonania (RTTI) Identyfikacje typu na etapie (Run Time Type Identification) wykonania (RTTI) Może powstać taka sytuacje, gdy w trakcie kompilacji typ obiektu nie jest znany. C++ implementuje polimorfizm poprzez hierarchie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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ę

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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.

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,

Bardziej szczegółowo

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.

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

Bardziej szczegółowo

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 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

Bardziej szczegółowo

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

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

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

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

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

Bardziej szczegółowo

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE 1. Proste typy danych- ciąg dalszy 2. Typy złożone danych : TABLICE Wykład 3 ZMIENNE PROSTE: TYPY WBUDOWANE Typy zmiennoprzecinkowe: float double long double Różne rozmiary bajtowe. W konsekwencji różne

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

Wartości domyślne, szablony funkcji i klas

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie obiektowe w języku

Programowanie obiektowe w języku Programowanie obiektowe w języku C++ Stanisław Gepner sgepner@meil.pw.edu.pl Dziedziczenie Wstęp Zacznijmy od przykładu Przykład rolniczy Każde zwierzątko wydaje dźwięk Każde się tak samo porusza Musimy

Bardziej szczegółowo

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: 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,

Bardziej szczegółowo

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

Bardziej szczegółowo

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie dr inż. Jacek Naruniec Kolokwium wykładowe Pierwsze kolokwium 6 kwietnia Drugie kolokwium 1 czerwca Kolokwium poprawkowe 8 czerwca

Bardziej szczegółowo

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()

Bardziej szczegółowo

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,

Bardziej szczegółowo

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

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;

Bardziej szczegółowo

Operatory na rzecz typu TString

Operatory na rzecz typu TString Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1 Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).

Bardziej szczegółowo

Przekazywanie argumentów wskaźniki

Przekazywanie argumentów wskaźniki Przekazywanie argumentów wskaźniki klasyczne wywołanie wyliczenie i zwrotne przekazanie tylko jednej wielkości moŝliwość uŝycia zmiennych globalnych niebezpieczeństwa z tym związane wyjście wywołanie funkcji

Bardziej szczegółowo

Techniki Programowania wskaźniki

Techniki Programowania wskaźniki Techniki Programowania wskaźniki Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem Wskaźniki Dla typu T zapis T* oznacza

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

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

Bardziej szczegółowo

TEMAT : KLASY POLIMORFIZM

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

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie struktury i klasy. Konstruktor i destruktor. Spotkanie 08 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Spotkanie 08 Klasy: definicja a deklaracja klasy dane składowe

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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)

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

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

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne

Bardziej szczegółowo

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej

Bardziej szczegółowo

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ IMIĘ i NAZWISKO: przykładowe odpowiedzi NR: 0 EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ 1. Napisz precyzyjnie co to jest ptr jeśli: const * const Foo ptr; ptr to stały wskaźnik do stałego obiektu typu Foo

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

Geneza powstania języka C++

Geneza powstania języka C++ 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.

Bardziej szczegółowo

Podstawy Programowania Obiektowego

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

Bardziej szczegółowo

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I 11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe 10.04.2017 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt Przykład wykorzystania obiektu Obiekt X jest instancją klasy Y Obiekt

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

Bardziej szczegółowo

Programowanie obiektowe

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;

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

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ć

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Szablony. Szablony funkcji

Szablony. Szablony funkcji Szablony Szablony sa mechanizmem ponownego wykorzystania kodu (reuse) W przypadku funkcji ponownie wykorzystany jest algorytm W przypadku klas ponownie wykorzystane sa wszystkie skladowe Deklaracja szablonu

Bardziej szczegółowo

Przeciążenie (przeładowanie nazw) funkcji

Przeciążenie (przeładowanie nazw) funkcji Przeciążenie (przeładowanie nazw) funkcji dla większości języków (w tym C) zasada w programie może być tylko jedna funkcja o danej nazwie kompilator C++ - dopuszcza więcej niż jedną funkcję o tej samej

Bardziej szczegółowo

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

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,

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Programowanie generyczne w C++ Dr inż. Andrzej Grosser Cz estochowa, 2016 2 Spis treści 1. Zadanie 3 5 1.1. Wprowadzenie.................................. 5 1.2. Obiekty funkcyjne................................

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Bardziej szczegółowo

Wykład 4: Klasy i Metody

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

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

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

Bardziej szczegółowo

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

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

Bardziej szczegółowo

Zad. 5: Układ równań liniowych liczb zespolonych

Zad. 5: Układ równań liniowych liczb zespolonych Zad. 5: Układ równań liniowych liczb zespolonych 1 Cel ćwiczenia Wykształcenie zdolności abstrahowania operacji arytmetycznych od konkretnych typów. Unaocznienie problemów związanych z programowaniem uogólnionym

Bardziej szczegółowo

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi: Programowanie (język C++) Wykład 8. ATD abstrakcyjny typ danych Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Metody czysto wirtualne Metody czysto wirtualne otrzymujemy inicjalizując

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 2

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

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski

Bardziej szczegółowo

Programowanie w językach

Programowanie w językach Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie

Bardziej szczegółowo

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo