Rzutowanie i konwersje
|
|
- Aneta Głowacka
- 8 lat temu
- Przeglądów:
Transkrypt
1 Rzutowanie i konwersje Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl 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: jk@noxon 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 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ółowoWprowadzenie 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ółowoWprowadzenie 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.
Bardziej szczegółowoWyliczanie 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ółowoReferencje 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ółowoWartości domyślne, przeciażenia funkcji
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ółowoWartoś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ółowoPola 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ółowoSzablon 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ółowoOperacje 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.
Bardziej szczegółowoPrzesł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
Bardziej szczegółowoSzablony 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ółowoKonstruktor 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ółowoWyją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
Bardziej szczegółowoKlasa, 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ółowoSzablon 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
Bardziej szczegółowoLista 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ółowoKlasa, 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ółowoIMIĘ 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ółowoWyją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ółowo1. 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ółowoObiekty 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ółowoHermetyzacja 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ółowoWykł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ółowoWstę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ółowoStyle 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ółowoPARADYGMATY 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ółowoWprowadzenie 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ółowoKurs 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ółowoPliki wykład 2. Dorota Pylak
Pliki wykład 2 Dorota Pylak Struktura programu działającego na plikach 1) Dyrektywa preprocesora #include //zapewnia dostęp do strumieni ifstream i ofstream 2) deklaracja zmiennej (strumienia)
Bardziej szczegółowoPROE 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ółowoTEMAT : 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ółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowoDziedziczenie 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ółowoProgramowanie 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
Bardziej szczegółowoProgramowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33
Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Bardziej szczegółowoObsługa wyjątków. Język C++ WW12
Obsługa wyjątków Pozwala zarządzać błędami wykonania w uporządkowany sposób. Umożliwia automatyczne wywołanie części kodu, funkcji, metod klas, który trzeba wykonać przy powstaniu błędów. try //blok try
Bardziej szczegółowoJę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ółowoKurs 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ółowoProgramowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus
Bardziej szczegółowoProgramowanie 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ółowoJę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ółowoKLASA 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
Bardziej szczegółowoWstęp do programowania obiektowego, wykład 7
Wstęp do programowania obiektowego, wykład 7 Klasy i funkcje abstrakcyjne Przeciążanie funkcji Definiowanie i interpretacja złożonych typów danych w C++ Wskaźniki do funkcji 1 KLASA ABSTRAKCYJNA 2 Klasa
Bardziej szczegółoworeferencje 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ółowoProgramowanie 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
Bardziej szczegółowoWstę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ółowoSkł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ółowoProgramowanie 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ółowoWykł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ółowoWstęp do programowania
wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych
Bardziej szczegółowoIdentyfikacje 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ółowoMETODY 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ółowoWykł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ółowoProgramowanie 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ółowoDo 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ć
Bardziej szczegółowoProgramowanie - wykład 4
Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include
Bardziej szczegółowoDziedziczenie jednobazowe, poliformizm
Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie
Bardziej szczegółowoWstęp do programowania
wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.
Bardziej szczegółowoProgramowanie 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ółowoKurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019
Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości
Bardziej szczegółowoProgramowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane
Bardziej szczegółowoPlik klasy. h deklaracje klas
Plik klasy. h deklaracje klas KLASY DLA PRZYKŁADÓW Z POLIMORFIZMEM enum dim r1 = 1, r2, r3; class figura public: static int const maxliczbafigur; = 100; static int liczbafigur; dim rn; rodzaj przestrzeni
Bardziej szczegółowo1 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ółowoKLASA 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
Bardziej szczegółowoZajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje
Bardziej szczegółowoW2 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ółowoProgramowanie 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ółowoJava - 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ółowoProgramowanie 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ółowoMechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Bardziej szczegółowoProgramowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane
Bardziej szczegółowoWprowadzenie 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ółowoC++ wprowadzanie zmiennych
C++ wprowadzanie zmiennych Każda zmienna musi być zadeklarowana, należy określić jej nazwę (identyfikator) oraz typ. Opis_typu lista zmiennych Dla każdej zmiennej rezerwowany jest fragment pamięci o określonym
Bardziej szczegółowoJę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ółowoProgramowanie 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
Bardziej szczegółowoWartoś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ółowoPodstawy 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ółowoC++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU
Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoPodczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.
Bardziej szczegółowoTechniki 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.
Bardziej szczegółowoJę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ółowoTEMAT : 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ółowoWykł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ółowoDo 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ć
Bardziej szczegółowoPodstawy 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ółowoProjektowanie 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ółowoProgramowanie 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];
Bardziej szczegółowoPytania 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ółowoOperatory 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ółowoProgramowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32
Programowanie w C++ Wykład 12 Katarzyna Grzelak 20 maja 2019 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
Bardziej szczegółowoPodstawowe 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ółowoTablice 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ółowoStyle 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.
Bardziej szczegółowoPrzekazywanie 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ółowoProgramowanie w języku C++
Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt 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ółowoProgramowanie 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ółowoPodstawy 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ółowoGeneza 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