Ściąga z JTP. (Ja Tjeba Pierd...) Uwagi, nowe pytania, poprawki itd. zgłaszać na forum mambo.

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

Download "Ściąga z JTP. (Ja Tjeba Pierd...) Uwagi, nowe pytania, poprawki itd. zgłaszać na forum mambo."

Transkrypt

1 Spis treści Ściąga z JTP (Ja Tjeba Pierd...) Uwagi, nowe pytania, poprawki itd. zgłaszać na forum mambo. Rzutowanie typów...1 Obiektówka i polimorfizm...2 Szablony...6 Wyjątki...8 STL i biblioteka standardowa...10 Modyfikatory...11 Kompilacja...12 Duperszmity...13 Rzutowanie typów Rodzaje rzutowań 1. Rzutowanie niejawne dokonuje się automatycznie, gdy próbujemy jakiejś zmiennej przypisać wartość innego typu: int foo = 5; float bar = foo; 2. Rzutowanie jawne wykonujemy samodzielnie za pomocą odpowiednich operatorów rzutowania i ręcznie określając typ. Rodzaje rzutowań jawnych 1. dynamic_cast Operuje wyłącznie na wskaźnikach i referencjach. W przypadku obiektów polimorficznych wykorzystuje RTTI do określenia ich typu i zdecydowania, czy mogą być one zrzutowane na wybrany typ. Jeśli nie, zwracany jest wskaźnik pusty NULL. Dla obiektów niepolimorficznych dynamic_cast zezwala na konwersję z klasy pochodnej do bazowej, ale nie na odwrót (błąd kompilacji). 2. static_cast Operuje na wskaźnikach, pozwala na rzutowanie między typami klas powiązanymi ze sobą, zarówno z klasy potomnej do bazowej, jak i na odwrót. Nie jest jednak wykonywane żadne dynamiczne sprawdzenie, czy rezultat takiego działania będzie mieć sens. static_cast może także pracować na zwykłych wartościach, udostępniając konwersję między typami podstawowymi (np. int i double). 3. reinterpret_cast Rzutuje dowolny typ wskaźnikowy na dowolny inny bez żadnego sprawdzania typów oraz poprawności. Nowy obiekt jest binarną kopią źródłowego. 4. const_cast pozwala zdjąć lub nałożyć parametr const na wybraną zmienną. Co oznacza skrót RTTI? Run-Time Type Information. Jest to technika polegająca na przechowywaniu w pamięci informacji o typach danych. Pozwala to sprawdzać typy podczas wykonywania programu. W C++ RTII jest niezbędne do działania operatora typeid oraz dynamic_cast. 1 z 13

2 Co robi typeid? Operator ten zwraca referencję do obiektu identyfikującego typ podanego za parametr wyrażenia. Można dzięki temu porównywać typy lub pobierać ich nazwę. Obiekt typeinfo zawarty jest w nagłówku typeinfo. #include <typeinfo> #include <iostream> int main() int *a, b; a = 0; b = 0; if(typeid(a)!= typeid(b)) cout << typeid(a).name() << ", " << typeid(b).name(); } } // end main(); Obiektówka i polimorfizm Funkcje/pola publiczne, prywatne i chronione... Różnią się w zależności od tego, skąd można się do nich odwołać: 1. Element publiczny dowolne miejsce kodu. 2. Element chroniony wyłącznie obiekty tej samej klasy oraz klas potomnych. 3. Element prywatny wyłącznie obiekty tej samej klasy. Dziedziczenie publiczne, prywatne i chronione... Zmienia widoczność elementów klasy bazowej według następujących zasad: 1. publiczne wszystkie elementy klasy bazowej zachowują oryginalną widoczność. 2. chronione elementy publiczne w klasie bazowej stają się chronionymi w pochodnej, reszta pozostaje bez zmian. 3. prywatne elementy publiczne i chronione w klasie bazowej stają się prywatne w klasie pochodnej, zatem nie są widoczne dla kolejnych klas, które dziedziczą po klasie pochodnej. Co to jest polimorfizm? Polimorfizm umożliwia zapamiętanie w obiektach informacji o tym, czym tak naprawdę są, dzięki czemu zachowują swoje oryginalne zachowania nawet po zrzutowaniu do klasy bazowej. Załóżmy, że klasa bazowa base posiada metodę foo(), a klasa pochodna derive przeciąża foo(). Tworzymy obiekt klasy derive, przypisujemy go do wskaźnika x typu base i wywołujemy spod niego metodę foo(). Co się stanie: 1. Bez polimorfizmu wywołana zostanie metoda foo() z klasy bazowej pomimo tego, że obiekt tak naprawdę jest klasy derive. Metoda została określona w momencie kompilacji na podstawie typu wskaźnika. 2 z 13

3 2. Z polimorfizmem wywołany zostanie wskaźnik do odpowiedniej metody przechowywany w tablicy metod wirtualnych obiektu. Jeżeli do x przypisaliśmy obiekt klasy derive, wywoła się przeciążona metoda. Jeżeli zaś obiekt klasy base, wtedy podstawowa. Czym są metody (funkcje) wirtualne? Są to metody poprzedzone słowem kluczowym virtual. Są realizacją polimorfizmu. Zadeklarowanie metody jako wirtualnej powoduje, że jej adres zostaje zapamiętany w tablicy metod wirtualnych, do której wskaźnik trafia do każdego obiektu tej klasy. Wywołując taką metodę nawet po zrzutowaniu obiektu do klasy nadrzędnej, zostanie wywołana "ta właściwa" wybór konkretnej metody następuje w momencie wykonania programu, a nie kompilacji, na podstawie tablicy metod wirtualnych. Czym się różni dziedziczenie zwykłe od wirtualnego? Różnice dotyczą dziedziczenia wielokrotnego. Załóżmy następującą sytuację: klasa D dziedziczy z B i C, a obie te klasy dziedziczą z klasy A. A B C Teraz: D 1. Przy dziedziczeniu zwykłym wszystkie elementy klasy A zostaną powielone dwukrotnie w klasie D, co prowadzi do niejednoznaczności. 2. Przy dziedziczeniu wirtualnym wszystkie elementy klasy A wystąpią w klasie D dokładnie jeden raz. Kiedy klasa powinna mieć destruktor wirtualny? Klasa powinna mieć destruktor wirtualny zawsze, gdy mamy w niej choć jedną metodę wirtualną. Czy i ew. kiedy można jawnie wywołać destruktor klasy? W sytuacji gdy korzystamy z "placement new" (umieszczanie obiektów w ściśle określonym miejscu pamięci), bierzemy całkowitą odpowiedzialność za zniszczenie stworzonych tak obiektów. Wtedy można, a nawet trzeba jawnie wywołać destruktor. W jakiej kolejności niszczone są obiekty? Obiekty są niszczone w odwrotnej kolejności do tej, jak były tworzone (tj. pierwszy utworzony = ostatni zniszczony). Analogiczna sytuacja dotyczy obiektów umieszczonych w tablicach. W jakiej kolejności wywoływane są destruktory obiektu? Kolejno od najwyżej położonej klasy pochodnej do klasy bazowej. Jeżeli jakaś klasa dziedziczy po kilku innych, ich destruktory wywoływane są w odwrotnej kolejności, niż zostały wymienione na liście dziedziczonych klas. 3 z 13

4 Jakie są własności funkcji/klas zaprzyjaźnionych? 1. Przyjaźń nie jest dziedziczona. 2. Przyjaźń nie jest przechodnia. Jeśli A jest przyjacielem B oraz B jest przyjacielem C, to A nie jest przyjacielem C, o ile nie zadeklarowaliśmy jawnie inaczej. 3. Przyjaźń nie jest zwrotna. To, że klasa A ma dostęp do prywatnych składowych B nie znaczy, że B ma dostęp do prywatnych składowych A. Jakich operatorów nie można przeciążać? Nieprzeciążalnymi operatorami są: 1.. (kropka) 2..* 3.?: 4. :: (operator zakresu) 5. sizeof Na czym polega const correctness? Polega na ochronie przed celową lub przypadkową zmianą obiektu przy pomocy słowa kluczowego "const". Argumenty typu const mogą być używane wyłącznie do odczytu kompilator zablokuje próbę wykonania na nich jakichkolwiek operacji modyfikujących wartość, w tym próbę wywołania metod obiektu, które taką zmianę powodują. Kiedy wskaźnik do obiektu klasy potomnej nie może być rzutowany do wskaźnika obiektu klasy bazowej? Gdy mamy wielokrotne dziedziczenie i ścieżka rzutowania jest niejednoznaczna: A A B C D Rozwiązanie (rzutujemy wskaźnik do d na wskaźnik do a): d obj; a *p = static_cast<d::b*>(&obj); Co to jest ADL, OL i czym się różnią? 1. OL Ordinary Lookup szukanie operatora w aktualnym kontekście. 2. ADL Argument Depending Lookup, Koeing Lookup poszukiwanie operatora w przestrzeni nazw, w której zadeklarowane są typy obu jego argumentów. 4 z 13

5 Rozwiń skrót VMTP. Virtual Method Table Pointer wskaźnik do tablicy metod wirtualnych używanej przy polimorfiźmie. Zawiera go każdy obiekt, w którym korzystamy z metod wirtualnych. Jak utworzyć klasę, z której nie można dziedziczyć? class Finalizer friend class A; private: Finalizer()} class A: public virtual Finalizer Jaki typ powinien zwracać przeciążony operator ->? Operator ten musi zwrócić wskaźnik lub obiekt klasy, który także ma przeciążony ten sam operator. Czy klasa zagnieżdżona ma dostęp do prywatnych składowych klasy zewn.? Tak. Poniższy kod nie powoduje żadnego błędu kompilacji: class foo public: class bar public: int xyz(foo &x) return x.foobar; } void setfoobar(int a) foobar = a; } private: int foobar; Czym się różni struktura (struct) od klasy (class)? W C++ jedyna różnica (oprócz słowa kluczowego) polega na tym, że jeżeli określiliśmy jakiś element składowy poza modyfikatorem dostępu (public, private, protected), to: 1. W klasie będzie on prywatny. 2. W strukturze będzie on publiczny. Poza tym struktury mogą posiadać metody, podlegają dziedziczeniu, możliwe jest także, 5 z 13

6 żeby struktura dziedziczyła po klasie i na odwrót. Jakie elementy klasy nie podlegają dziedziczeniu? 1. Konstruktory 2. Destruktory 3. Operator przypisania (=) Jak wygląda algorytm wyboru funkcji przeciążonej? 1. Dopasowanie dokładne: brak lub trywialne konwersje (T -> const T) 2. Dopasowanie z promocjami (całkowitymi lub zmiennoprzecinkowymi), np. bool -> int czy float -> double. 3. Dopasowanie ze standardowymi konwersjami (double -> int) 4. Dopasowanie z konwersjami zdefiniowanymi przez użytkownika (operatory konwersji, konstruktory konwertujące) 5. Dopasowanie do funkcji z dowolną ilością parametrów. Szablony Co to jest metaprogramowanie? Technika programowania umożliwiająca programom tworzenie/modyfikację kodu źródłowego innych programów lub ich samych. Jedną z implementacji jest metaprogramowanie z użyciem szablonów w C++. Co to jest programowanie uogólnione (generic programming)? Pozwala na pisanie kodu bez wcześniejszej znajomości typów danych, na których ten kod będzie pracować. W C++ realizowane przy pomocy szablonów. Opisz pojęcie klasy wytycznych (policy class). Klasa wytycznych mówi, w jaki sposób ma być realizowana obsługa elementarnego zadania w większej klasie X. Do klasy X przekazywana jest jako parametr szablonu. Przykład klasy parametryzowanej wytycznymi: template <class T, class Foo> class Bar: public Foo Możemy teraz sami decydować, po jakiej klasie ma dziedziczyć klasa Bar. Klasa, po której dziedziczymy, jest właśnie klasą wytycznych. Przykłady: alokatory w STL-u. Konkretyzacja na żądanie i konkretyzacja jawna. 1. Konkretyzacja jawna kompilator konkretyzuje od razu całą klasę w momencie, gdy będziemy chcieli jej użyć. 2. Konkretyzacja na żądanie kompilator konkretyzuje wyłącznie metody klasy, które 6 z 13

7 wykorzystujemy. W ten sposób można konkretyzować klasę typem, który nie spełnia wszystkich ograniczeń. Wszystko będzie w porządku, dopóki nie będziemy próbowali wykonać operacji odwołujących się do niespełnianych założeń. Aby poinformować kompilator, że chcemy mieć konkretyzację na żądanie, należy poprzedzić deklarację zmiennej słowem template: template foo<int> variable; Co to jest CRTP? Curiously Recurring Template Pattern idiom programowania uogólnionego. Dziedziczymy z klasy bazowej, której parametrem jest aktualnie definiowana klasa: template <class T> class Base class Derived: public Base<Derived> Co to jest polimorfizm statyczny? Jest to imitacja polimorfizmu wykonywana z użyciem szablonów. Polega na odpowiednim zrzutowaniu typów jeszcze w momencie kompilacji za pomocą schematu CRTP. Przykład: template <class Derived> struct base void interface() static_cast<derived*>(this)->implementation(); } struct derived : base<derived> void implementation(); Do czego służy słowo kluczowe typename? Służy do podpowiadania przy deklarowaniu pól klasy, że odwołujemy się do typu składowego innej klasy, a nie np. jej zmiennej statycznej. template <class T> class foo typename T::id x; public: void func() x.g(); } 7 z 13

8 class bar public: class id public: void g() } foo<bar> variable; variable.func(); W powyższym przypadku dzięki typename zaznaczyliśmy, że potrzebujemy klasy składowej id z typu przekazanego parametrem T. Bez tego słowa powstałby w tamtym miejscu błąd kompilacji. typename może być też używany w obrębie deklaracji szablonu zamiast słowa kluczowego class: template <typename T> Opisz pojęcie klasy cech (traits). Klasa cech dostarcza dodatkowych informacji o używanym typie: typy stowarzyszone, ograniczenia, dostępne operacje. Przekazywujemy ją przez parametry szablonu. Co to jest koncept? Odpowiednik interfejsu z programowania obiektowego dla programowania uogólnionego. Koncept określa podstawowe warunki jakie musi spełniać typ, aby mógł być zaliczonym do odpowiedniej kategorii. Jak wygląda algorytm rozstrzygania przeciążenia szablonów funkcji? 1. Tworzenie zbiorów specjalizacji. 2. Do dalszych rozważań wybierane są funkcje bardziej specjalizowane (lepiej pasujące do wywołania). 3. Rozstrzyganie przeciążenia na zbiorze specjalizacji i funkcji przeciążonych. 4. Jeśli funkcja i specjalizacja są jednakowo dobre, wybierana jest funkcja. Wyjątki Kiedy wyjątek będzie złapany? try throw Thrown; } catch(caught) } 1. Gdy Thrown I Caught są tego samego typu. 8 z 13

9 2. Gdy Caught jest jednoznaczną klasą bazową Thrown. 3. Gdy Caught i Thrown są wskaźnikami do typów spełniających warunek 1 albo Gdy Caught i Thrown są referencjami do typów spełniających warunek 1 albo 2. Jakiej konstrukcji używamy do łapania wszystkich wyjątków? try } catch(...) // wszystko idzie tutaj. } Kiedy wołana jest funkcja unexpected()? Gdy funkcja rzuci wyjątek, którego nie złapiemy i którego nie miała wyszczególnionego na liście wyjątków. Jakie są standardowe wyjątki C++? 1. exception podstawowa klasa wyjątku 2. bad_alloc rzucany przez operator new w przypadku niepowodzenia. 3. bad_cast rzucany przez dynamic_cast. 4. bad_exception rzucany, gdy wyjątek nie pasuje do żadnego bloku catch. 5. bad_typeid rzucany przez typeid. 6. ios_base::failure rzucany przez bibliotekę iostream. Jak powiadomić kompilator o tym, jakie wyjątki może wygenerować funkcja? Po liście parametrów podajemy słowo kluczowe throw i wymieniamy w nawiasie dozwolone typy wyjątków: void foo(char bar) throw(int); Jak powiadomić kompilator, że funkcja nie może rzucać żadnych wyjątków? Po liście parametrów podajemy słowo kluczowe throw z pustymi nawiasami: void foo(char bar) throw(); Jak przekazać wyjątek do obsługi nadrzędnemu blokowi try...catch? W bloku catch umieszczamy słowo kluczowe throw bez żadnych parametrów: try } catch(foo &x) throw; 9 z 13

10 } STL i biblioteka standardowa Co to jest kontener? Kontener służy do przechowywania w pewien uporządkowany sposób kolekcji obiektów tego samego typu. Rodzaje kontenerów: 1. Sekwencyjne (vector, list, deque) nie mogą być zaimplementowane za pomocą innych kontenerów bez straty efektywności. 2. Asocjacyjne (map, multimap) implementacje bazujące na drzewach. 3. Uporządkowane (set, multiset) odmiana kontenerów asocjacyjnych. 4. Adaptery (stack, queue, priority_queue) - bazują na innych kontenerach, wprowadzając ograniczenia dostępowe 5. Specjalne (string, bitset, valarray) Co to jest alokator? Alokator to klasa wytycznych zajmująca się zarządzaniem pamięcią w kontenerach. Co to jest funktor? Inaczej obiekt funkcyjny z przeciążonym operatorem funkcji (). Używany jest do parametryzowania algorytmów i przycinania ich do naszych potrzeb. Przykładowe funktory: plus, minus, negate Co to jest iterator? Iterator jest jest uogólnieniem wskaźnika; jest to obiekt służący do wskazywania na inny obiekt, a także do przemieszczania się po sekwencji obiektów. Wymień koncepty iteratorów. 1. TrivialIterator wskaźnik bez iteracji. 2. OutputIterator taśma wyjściowa: inkrementacja i dereferencjacja do l-wartości. Porównywalny. 3. InputIterator taśma wejściowa: inkrementacja i dereferencjacja do r-wartości. Porównywalny. 4. ForwardIterator połączenie InputIterator oraz OutputIterator. 5. BidirectionalIterator ForwardIterator z dekrementacją. 6. RandomAccessIterator BidirectionalIterator z operacjami dodawania/odejmowania. Porównywalny, także za pomocą operatorów relacji (mniejszy, większy). Wymień adaptery iteratorów. 1. front_insert_iterator 2. back_insert_iterator 10 z 13

11 3. insert_iterator Jakie są założenia algorytmów w STL? Algorytmy te mają charakter ogólny nie są pisane z myślą o konkretnej strukturze danych. Operują na sekwencjach elementów wyznaczonych przez parę iteratorów, z których pierwszy wskazuje na początkowy element, a drugi za ostatnim elementem. Dlaczego sort() z STL jest szybszy, niż qsort() z C? 1. Mechanizm porównywania przekazujemy do qsort() za pośrednictwem wskaźnika do funkcji. Jej wywoływanie przez to zajmuje trochę czasu. W STL-u operacja porównania jest rozwijana na miejscu już w momencie kompilacji. 2. W STL-u nie mamy w tym miejscu żadnego rzutowania typów z void*. Was steht für ein Manipulator? Element sterujący strumieni. Rodzaje manipulatorów: 1. Włączanie flag 2. Wyłączanie flag 3. Podstawa systemu liczbowego 4. Rodzaj formatu zmiennopozycyjnego 5. Wyrównywanie 6. Sterowanie wyjściem 7. Parametryzowane Modyfikatory Do czego służy volatile? Informuje kompilator, że wykorzystanie tej zmiennej nie może być optymalizowane np. przez czasowe przeniesienie jej do rejestru procesora bądź cache, gdyż istnieje prawdopodobieństwo, że może być ona w tym samym czasie zmodyfikowana przez inny wątek, co prowadziłoby oczywiście do nieścisłości w wykonywanym programie. Do czego służy mutable? Informuje, że dane pole obiektu może być zmieniane nawet przez metody const lub gdy obiekt przekazywany jest jako parametr typu const. Do czego służy register? Informacja dla kompilatora, że zmienna powinna być optymalizowana poprzez przeniesienie jej do rejestru. Obecnie ignorowana w zasadzie przez każdy kompilator. Do czego służy auto? Deklaruje zmienną lokalną, dodatkowo automatycznie wybiera typ na podstawie podanej wartości. Dzisiaj w zasadzie nieużywany. 11 z 13

12 Kompilacja Wymień etapy kompilacji. 1. Analiza leksykalna rozdzielenie kodu na elementarne jednostki języka zwane tokenami. 2. Analiza składniowa sprawdzenie, czy ułożenie tokenów nie łamie żadnej z reguł gramatycznych języka. 3. Analiza semantyczna określenie znaczenia poszczególnych tokenów. Na koniec tego etapu otrzymujemy reprezentację pośrednią kodu źródłowego. 4. Optymalizacja wiadomo. 5. Generacja kodu wynikowego. Wymień etapy budowania programu wynikowego. 1. Preprocessing preprocesor (kod źródłowy -> jednostka translacji) 2. Kompilacja kompilator (jednostka translacji -> plik obiektowy) 3. Łączenie linker (pliki obiektowe + biblioteki -> program) Czym się różni łączenie zewnętrzne od wewnętrznego? 1. Elementy łączone wewnętrznie są dostępne wyłącznie w obrębie kodu stanowiącego jedną jednostkę translacji. 2. Elementy łączone zewnętrznie są dostępne ze wszystkich plików obiektowych tworzących program. Jak wymusić łączenie wewnętrzne? Poprzez zastosowanie nienazwanych przestrzeni nazw. W jaki sposób zapewnić, aby zmienna globalna była łączona zewnętrznie? Poprzez użycie słowa kluczowego extern: extern int foo; Co to jest ODR? One Definition Rule. Mówi ona, że jedna nazwa (klasa, szablon, funkcja inline) może być zdefiniowana kilkakrotnie, jeżeli: 1. Każda definicja znajduje się w innej jednostce translacji. 2. Definicje są identyczne co do tokenu. 3. Znaczenie tokenów jest identyczne we wszystkich jednostkach translacji. Dlaczego definicje klas należy umieszczać w plikach nagłówkowych? Definicje podlegają regule ODR. Gdyby np. klasa została umieszczona w kilku jednostkach translacji w niezbyt identycznej formie, wystąpiłby błąd kompilacji. Czym są wiązania wczesne i późne? 1. Wiązanie wczesne (early binding) wiązanie wywołania funkcji składowej w czasie kompilacji 2. Wiązanie późne (late binding) wiązanie wywołania funkcji w czasie wykonywania. 12 z 13

13 Duperszmity Czym jest Smart Pointer? Abstrakcyjny typ danych symulujący wskaźnik i zapewniający dodatkowe właściwości pozwalające uniknąć błędów, np. automatyczne niszczenie obiektu, gdy ten przestaje być już używany. Kiedy tworzona jest zmienna statyczna? 1. Gdy zadeklarujemy zmienną jako zmienną globalną. 2. Gdy deklarację zmiennej poprzedzimy słowem kluczowym static. Rozwiń skrót RAII. Resource Allocation Is Initialization oznacza tworzenie na stosie specjalnych obiektów, których destruktory zwalniają zajęte miejsce podczas zwijania stosu. Takimi obiektami mogą być smart pointery. W jaki sposób korzysta się ze słowa kluczowego enum? enum [nazwa_typu] wartosc1 [= liczba], wartosc2 [= liczba],... } [lista nazw zmiennych oddzielonych przecinkiem]; Co to znaczy "foo"? :) z 13

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

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

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

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

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

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

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

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

Język C++ Programowanie obiektowe

Język C++ Programowanie obiektowe Język C++ Programowanie obiektowe Cechy programowania obiektowego abstrakcyjne typy danych hermetyczność obiektów (kapsułkowanie) dziedziczenie polimorfizm Programowanie proceduralne vs. programowanie

Bardziej szczegółowo

Spis treści. Wprowadzenie 15

Spis treści. Wprowadzenie 15 Spis treści Wprowadzenie 15 1. Mechanizmy języka C++ 19 1.1. Struktura programu jednostki translacji.................. 21 1.1.1. Składnia tekstu źródłowego...................... 22 1.1.2. Preprocesor...

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;

Bardziej szczegółowo

.NET Klasy, obiekty. ciąg dalszy

.NET Klasy, obiekty. ciąg dalszy .NET Klasy, obiekty ciąg dalszy Przeciążanie operatorów 1 W języku C# istnieje możliwość zdefiniowania funkcjonalności dużej części operatorów dla typów stworzonych przez użytkownika. Dzięki takiemu zabiegowi,

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 W językach niskopoziomowych błędy zgłaszane były przez zwracanie odpowiedniego statusu (liczby) W C main() zwraca int żeby można było określić

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

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

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

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Instrukcja do pracowni specjalistycznej z przedmiotu Obiektowe programowanie aplikacji Kod przedmiotu: TS1C410201

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

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

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 9: Polimorfizm i klasy wirtualne Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Programowanie obiektowe i metody wirtualne 2 W programowaniu obiektowym polimorfizm

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie

Bardziej szczegółowo

Obsługa wyjątków. Język C++ WW12

Obsł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ół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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE. C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie obiektów wewnątrz innych klas,

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

C++ - [4-7] Polimorfizm

C++ - [4-7] Polimorfizm Slajd 1 z 14 C++ - [4-7] Polimorfizm Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 20 maja 2013 r. Slajd 2 z 14 Polimorfizm i klasa polimorficzna POLIMORFIZM (cytat z Wikipedii) (wielopostaciowość)

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

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

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

C++ Przeładowanie operatorów i wzorce w klasach

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie

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

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

Część I Programowanie niskiego poziomu w języku C 19

Część I Programowanie niskiego poziomu w języku C 19 Spis treści Przedmowa 13 Wstęp 15 Część I Programowanie niskiego poziomu w języku C 19 Wprowadzenie 21 1 Typy 23 1.1 Fundamentalne typy danych...................... 23 1.2 Typy pochodne.............................

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas 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ół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

Dziedziczenie jednobazowe, poliformizm

Dziedziczenie 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ół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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 5 Okna MDI i SDI, dziedziczenie Wykład 5 Okna MDI i SDI, dziedziczenie Autor: Zofia Kruczkiewicz Zagadnienia 1. Aplikacja wielookienkowa. Zakładanie projektu typu CLR Windows Forms 1.1. Aplikacja typu MDI 1.2. Aplikacja typu SDI 2. Dziedziczenie

Bardziej szczegółowo

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor

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

STL: Lekcja 1&2. Filozofia STL

STL: Lekcja 1&2. Filozofia STL STL: Lekcja 1&2 Tematy: Filozofia STL Po co nam STL? Podstawowa zawartość STL Co warto znać zanim zaczniemy pracę z STL?: wskaźniki Praca na tekstach: klasa String Vector: nowy wymiar standardowych tablic.

Bardziej szczegółowo

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM POLIMORFIZM Podstawowe pytanie, które nieustannie ma towarzyszyć autorowi programowi: czy gdyby nagle okazało się, że jest więcej... (danych na wejściu, typów danych, czynności, które program ma wykonać,

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

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs 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ółowo

Dziedziczenie. Ogólna postać dziedziczenia klas:

Dziedziczenie. Ogólna postać dziedziczenia klas: Dziedziczenie Ogólna postać dziedziczenia klas: class nazwa_clasy_pochodnej : specyfikator_dostępu nazwa_clasy_bazowej specyfikator_dostępu : public private protected Specyfikator dostępu definiuje, w

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

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

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

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

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

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

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop. 2016 Spis treści Spis rysunków 11 Spis tabel 13 Przedmowa 15 Wprowadzenie 17 Podziękowania 27 O autorach 29 1 Wprowadzenie

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

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

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego. Funkcje wirtualne W C++ polimorfizm jest zrealizowany w dwa sposoby: na etapie kompilacji i na etapie wykonania. Na etapie kompilacji polimorfizm jest zrealizowany poprzez przeciążenie funkcji i operatorów.

Bardziej szczegółowo

Klasy cd. Struktury Interfejsy Wyjątki

Klasy cd. Struktury Interfejsy Wyjątki Klasy cd. Struktury Interfejsy Wyjątki Struktury Struktura pozwala na zdefiniowanie typu danych, który nie charakteryzuje się zbyt złożoną funkcjonalnością (np. punkt, kolor, etc). Do definiowania struktury

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 6 Katarzyna Grzelak kwiecień 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40 STL - powtórzenie STL Standard Template Libarary standardowa biblioteka szablonów Składowe biblioteki:

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki > C++ dziedziczenie Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1432108800 > Dziedziczenie Dziedziczenie C++ dziedziczenie 2 / 13 > Dziedziczenie Dziedziczenie * to

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

Wstęp do programowania obiektowego, wykład 7

Wstę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ół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

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

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

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

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 i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

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

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.

Bardziej szczegółowo

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu. .NET Klasy, obiekty Klasa i obiekt Każdy obiektowy język programowania daje programiście możliwość tworzenia nowych typów danych. Nowy typ danych definiuje się poprzez zdefiniowanie klasy. Co to jest klasa?

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

PHP 5 język obiektowy

PHP 5 język obiektowy PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje

Bardziej szczegółowo

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

Bardziej szczegółowo

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31 Programowanie w C++ Wykład 8 Katarzyna Grzelak 7 maja 2018 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31 STL - powtórzenie STL Standard Template Libarary standardowa biblioteka szablonów Składowe biblioteki:

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

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

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

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

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

10. Programowanie obiektowe w PHP5

10. Programowanie obiektowe w PHP5 Ogólnie definicja klasy wygląda jak w C++. Oczywiście elementy składowe klasy są zmiennymi PHP, stąd nieśmiertelne $. Warto zauważyć, że mogą one mieć wartość HHH mgr inż. Grzegorz Kraszewski TECHNOLOGIE

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Do czego służą klasy?

Do czego służą klasy? KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać

Bardziej szczegółowo