Spis treści. Wprowadzenie 15

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

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

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Zaawansowane programowanie w C++ (PCP)

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Programowanie obiektowe - 1.

Podstawy Programowania

Rok akademicki: 2016/2017 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

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

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

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

Cena szkolenia. Opis kursu

Programowanie obiektowe Object programming. Elektrotechnika II stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny)

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Programowanie (C++) NI 5

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

Podstawy Programowania

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

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

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

Język C++ wykład VIII

Podstawy Programowania Obiektowego

Dziedziczenie jednobazowe, poliformizm

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

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

Godzina (wtorek)

C++. Æwiczenia zaawansowane

PRZEWODNIK PO PRZEDMIOCIE

Cena szkolenia. Opis kursu

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Przetwarzanie i analiza danych w języku Python / Marek Gągolewski, Maciej Bartoszuk, Anna Cena. Warszawa, Spis treści

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

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Wzorce projektowe. dr inż. Marcin Pietroo

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

Rok akademicki: 2012/2013 Kod: JFM s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie II C16

Zaliczenie przedmiotu:

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Symfonia C++ standard : programowanie w języku C++ orientowane obiektowo. T. 2 / Jerzy Grębosz. Wyd. 3 C popr. Kraków, 2015.

Materiały do zajęć VII

Język C++ Programowanie obiektowe

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

OPIS MODUŁU KSZTAŁCENIA (SYLABUS)

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

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

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

TEMAT : KLASY DZIEDZICZENIE

Paradygmaty programowania

Zaawansowane programowanie w C++ (PCP)

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

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

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

KARTA KURSU. Programowanie obiektowe

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Programowanie w języku Java 7 z biblioteką SWING

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

Szablony klas, zastosowanie szablonów w programach

Visual C# dla zupełnie początkujących / Tony Gaddis. Wydanie IV. Gliwice, copyright Spis treści. Wstęp 11. Uwaga, czytelnicy 19

Modelowanie i Programowanie Obiektowe

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

Wykład 0 Informacje Podstawowe

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne)

Najlepsze źródło informacji o C++! Kompletny podręcznik do nauki C++!

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

PODSTAWY PROGRAMOWANIA STRUKTURALNEGO (C) SYLABUS A. Informacje ogólne

Rok akademicki: 2012/2013 Kod: EAR s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

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

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Kurs WWW. Paweł Rajba.

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Programowanie MorphX Ax

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Zaawansowane programowanie w języku C++

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

Programowanie Obiektowe i C++ Marcin Benke

Programowanie w języku Java (OCA+OCP)

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Programowanie obiektowe

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie I C6

Zaawansowane programowanie w C++ (PCP)

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

Zaawansowane programowanie w C++ (PCP)

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

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Transkrypt:

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... 25 1.1.3. Składniki jednostki translacji..................... 26 1.2. System typów.................................. 28 1.2.1. void................................... 29 1.2.2. bool................................... 29 1.2.3. Typy liczbowe............................. 30 1.2.4. Wskazaniaitablice... 31 1.2.5. Enumeracje... 33 1.2.6. Typreferencyjny... 34 1.3. Deklarowanie i definiowanie funkcji...................... 37 1.3.1. main()................................. 38 1.3.2. Przeciążanie funkcji i operatorów; specyfikacja wiązania...... 38 1.3.3. Parametryfunkcji... 40 1.3.4. Funkcje z parametrami dodatkowymi................. 41 1.3.5. Funkcje z parametrami domniemanymi................ 43 1.3.6. Funkcjerozwijane... 45 1.4. Zarządzanie nazwami.............................. 47 1.4.1. Zasięgi.................................. 47 1.4.2. Przestrzenienazw... 49 1.4.3. Deklaracje i dyrektywy using..................... 51

4 Spis treści 1.4.4. Anonimowe przestrzenie nazw..................... 52 1.4.5. Wiązanianazw... 53 1.5. Zarządzanieobiektami... 54 1.5.1. Klasy pamięci.............................. 55 1.5.2. Definiowanie i deklarowanie obiektów................ 56 1.5.3. Zarządzanie pamięcią dynamiczną.................. 57 1.5.4. Obiekty ustalone i ulotne....................... 60 1.6. Zarządzanieoperacjami... 62 1.6.1. Wyrażenia... 62 1.6.2. Priorytety operatorów i reguły przeciążania............. 63 1.6.3. Instrukcje................................ 66 1.7. Klasy autonomiczne.............................. 68 1.7.1. Definiowanie klas autonomicznych.................. 68 1.7.2. Składowe klasy............................. 69 1.7.3. Konstruktory i destruktory...................... 71 1.7.4. Projektowanie klas autonomicznych................. 72 1.7.5. Funkcjeskładowe... 74 1.7.6. Przeciążanie operatorów........................ 75 1.7.7. this................................... 77 1.7.8. Funkcje i klasy zaprzyjaźnione.................... 78 1.7.9. Fraction................................ 81 1.7.10.Składowestatyczne... 83 1.7.11. Efekty uboczne konstruktorów i destruktorów............ 86 1.7.12. Klasy ze zmienną strukturą wewnętrzną............... 86 1.7.13. Klasy zagnieżdżone........................... 91 1.7.14.Listyinicjacyjne... 93 1.7.15. Klasy lokalne.............................. 95 1.7.16. Wskazania na składowe klasy..................... 97 1.8. Dziedziczenie i polimorfizm.......................... 98 1.8.1. Klasy pochodne: składnia i terminologia............... 99 1.8.2. Klasy bazowe wirtualne........................ 100 1.8.3. Dostęp do składowych......................... 101 1.8.4. Dziedziczenie i funkcje przeciążone.................. 103

Spis treści 5 1.8.5. Dziedziczenie a zawieranie....................... 104 1.8.6. Wskazania i referencje......................... 105 1.8.7. Funkcje wirtualne i polimorfizm.................... 106 1.8.8. Destruktory wirtualne......................... 107 1.8.9. Funkcje wirtualne czyste i klasy abstrakcyjne............ 108 1.8.10. Realizacja funkcji wirtualnych..................... 110 1.8.11. Identyfikacja typów w czasie wykonania............... 111 1.9. Szablony..................................... 113 1.9.1. Vect................................... 115 1.9.2. Schemat składniowy szablonów.................... 116 1.9.3. Matrix................................. 119 1.9.4. Reguły konkretyzacji szablonów.................... 121 1.9.5. Specjalizacje szablonów........................ 124 1.9.6. Szablony w szablonach......................... 126 1.9.7. Szablony i zaprzyjaźnienia....................... 127 1.9.8. Szablony i dziedziczenie........................ 128 1.9.9. Nazwy zależne............................. 130 1.10.Obsługa sytuacji wyjątkowych........................ 132 1.10.1. Wyjątki i sterowanie nielokalne.................... 133 1.10.2. Identyfikowanie wyjątków....................... 135 1.10.3. Mechanizm obsługi wyjątków w C++................ 136 1.10.4. Przekazywanie wyjątku do bloku obsługi............... 138 1.10.5. Wybór bloku obsługi.......................... 138 1.10.6. Ponowne zgłoszenie wyjątku...................... 139 1.10.7. Specyfikacja wyjątków......................... 140 1.10.8. Akcesoria standardowe......................... 141 1.10.9. Blok funkcyjny try...142 1.11.Podsumowanie................................. 144 2. Techniki stosowane w programowaniu generycznym 145 2.1. Klasy cech (trejty)............................... 145 2.1.1. Wybór wartości zależnych od danego typu.............. 146 2.1.2. Wybór algorytmu w czasie kompilacji................ 147 2.1.3. Standardowe klasy cech........................ 150

6 Spis treści 2.1.4. Wybór typu w zależności od klasy cech............... 152 2.1.5. Minimalizacja wielkości kodu wynikowego.............. 153 2.2. Klasy wytycznych............................... 154 2.2.1. Szablon jako parametr szablonu.................... 154 2.2.2. Tworzenie algorytmów z możliwością wyboru wariantu....... 156 2.2.3. Różnice pomiędzy klasami cech a klasami wytycznych....... 160 2.3. Metaprogramowanie.............................. 160 2.3.1. Metaprogramy zwiększające czytelność kodu............ 160 2.3.2. Obliczenia realizowane w czasie kompilacji.............. 161 2.3.3. Kolekcje typów............................. 163 2.3.4. Biblioteka boost::mpl......................... 165 2.4. Statyczne asercje i klasy wymagań...................... 167 2.4.1. Asercja czasu kompilacji........................ 168 2.4.2. Klasy wymagań............................. 169 2.5. Podsumowanie................................. 171 2.6. Ćwiczenia.................................... 172 3. Uchwyty do obiektów 175 3.1. Sprytne wskaźniki............................... 176 3.1.1. Wskaźnik boost::scoped ptr.................... 177 3.1.2. Wzorzec ukrywania implementacji (pimpl).............. 179 3.1.3. Kopiowanie jako przekazywanie własności, std::auto ptr..... 180 3.1.4. Zliczanie odniesień: boost::shared ptr i boost::weak ptr...182 3.1.5. Wskaźniki narzucające interfejs, boost::intrusive ptr...189 3.1.6. Porównanie...191 3.2. Opóźnione (leniwe) tworzenie i kopiowanie obiektów............ 191 3.2.1. Opóźnione (leniwe) tworzenie..................... 191 3.2.2. Wartości opcjonalne.......................... 194 3.2.3. Opóźnione kopiowanie......................... 195 3.2.4. Usunięcie obiektu tymczasowego................... 198 3.3. Iteratory..................................... 200 3.3.1. Wzorzec iteratora........................... 200 3.3.2. Iteratory z biblioteki standardowej.................. 202 3.4. Funktory.................................... 203

Spis treści 7 3.4.1. Obiekty typu boost::function................... 203 3.4.2. Wiązanie argumentów......................... 205 3.5. Adaptery.................................... 209 3.5.1. Adapterobiektów...209 3.5.2. Adaptery klas.............................. 210 3.5.3. Adaptery redukujące kod generowany przez szablony........ 210 3.6. Podsumowanie................................. 212 3.7. Ćwiczenia.................................... 212 4. Tworzenie obiektów 217 4.1. Fabrykaobiektów...218 4.2. Prototyp..................................... 222 4.3. Singleton.................................... 223 4.4. Fabryka abstrakcyjna.............................. 225 4.5. Zarządzanie stertą............................... 228 4.6. Mechanizmy refleksji.............................. 231 4.7. Podsumowanie................................. 233 4.8. Ćwiczenia.................................... 233 5. Współpraca pomiędzy obiektami 235 5.1. Polimorfizm...235 5.1.1. Interfejs bez funkcji wirtualnych................... 236 5.1.2. Wybór metody w czasie kompilacji.................. 236 5.1.3. Własny mechanizm późnego wiązania................ 238 5.2. Odwiedzający(wizytator)...239 5.2.1. Odwrócenie zależności......................... 240 5.2.2. Wizytator cykliczny.......................... 241 5.2.3. Wersja generyczna wizytatora..................... 243 5.2.4. Wizytator acykliczny.......................... 244 5.3. Wielometody.................................. 245 5.3.1. Wielometody wykorzystujące rzutowanie dynamiczne........ 246 5.3.2. Wielometody wykorzystujące wizytator............... 247 5.3.3. Późne wiązanie zależne od wielu parametrów............ 251 5.4. Komenda.................................... 252

8 Spis treści 5.4.1. Reprezentacja komend......................... 253 5.4.2. Ponawianie i wycofywanie akcji.................... 254 5.4.3. Komendy złożone............................ 255 5.4.4. Inne zastosowania komend....................... 256 5.5. Obserwator................................... 256 5.5.1. Opiswzorca...257 5.5.2. boost::signals oraz boost::signals2............... 259 5.5.3. Inne zastosowania........................... 262 5.6. Stałość fizyczna i logiczna........................... 262 5.7. Podsumowanie................................. 266 5.8. Ćwiczenia.................................... 266 6. Złożone struktury obiektów 269 6.1. Kompozyt.................................... 269 6.2. Dekorator.................................... 271 6.3. Rekordy..................................... 274 6.3.1. Struktury...274 6.3.2. Warianty................................ 275 6.3.3. Wartości opcjonalne.......................... 277 6.3.4. Obiekt dowolnego typu........................ 277 6.4. Kolekcjejednowymiarowe...278 6.4.1. std::vector.............................. 279 6.4.2. std::list...280 6.4.3. std::deque...281 6.4.4. std::set................................ 282 6.4.5. std::multiset...283 6.4.6. std::map i std::multimap...................... 283 6.4.7. std::tr1::unordered set i inne kontenery haszujące....... 284 6.4.8. std::basic string.......................... 285 6.4.9. boost::array...285 6.4.10. Porównanie kolekcji.......................... 286 6.4.11. Operacje na kolekcjach......................... 287 6.4.12. Wykorzystanie nienazwanych obiektów funkcyjnych........ 293 6.4.13. Standardowa biblioteka szablonów.................. 294

Spis treści 9 6.5. Tablicewielowymiarowe...295 6.6. Grafy, boost::graph.............................. 296 6.6.1. Reprezentacja grafów......................... 296 6.6.2. Algorytmy grafowe........................... 301 6.7. Podsumowanie................................. 304 6.8. Ćwiczenia.................................... 304 7. Dostęp do mechanizmów systemu operacyjnego 309 7.1. Obsługa czasu i daty.............................. 309 7.2. Wątki...................................... 311 7.2.1. Współbieżność w C++........................ 312 7.2.2. Zarządzanie wątkami.......................... 313 7.2.3. Sekcjekrytyczne...315 7.2.4. Wzorzec projektowy monitora (pasywny obiekt).......... 319 7.2.5. Wątki i implementacja potoków.................... 320 7.2.6. Blokada shared mutex......................... 322 7.2.7. Zmienne warunkowe.......................... 323 7.2.8. Unikanie niepotrzebnych blokad.................... 324 7.2.9. Aktywny obiekt............................. 325 7.2.10. Wątki uwagi końcowe........................ 329 7.3. Strumienie.................................... 329 7.3.1. Zapis i odczyt strumienia z pominięciem konwersji......... 331 7.3.2. Formatowanie za pomocą strumieni................. 332 7.3.3. Strumienie plikowe i napisowe..................... 334 7.3.4. Iteratory dla strumieni......................... 336 7.3.5. Bufory...336 7.3.6. Filtry dla strumieni.......................... 338 7.3.7. Strumienie błędów i komunikatów.................. 340 7.4. Asynchroniczna obsługa wejścia i wyjścia.................. 341 7.4.1. Generatory zdarzeń.......................... 342 7.4.2. Obsługa protokołów sieciowych.................... 345 7.4.3. Wykorzystanie puli wątków...................... 347 7.5. Podsumowanie................................. 348 7.6. Ćwiczenia.................................... 348

10 Spis treści 8. Przetwarzanie tekstu 353 8.1. Reprezentacja znaków i napisów, lokalizm.................. 353 8.1.1. Napisy...353 8.1.2. Znaki.................................. 354 8.1.3. Lokalizm...355 8.2. Algorytmydlanapisów...358 8.3. Wyrażenia regularne i gramatyki bezkontekstowe.............. 359 8.3.1. boost::regexp wyrażenia interpretowane w czasie działania.. 359 8.3.2. boost::xpressive wyrażenia tworzone w czasie kompilacji... 363 8.3.3. Gramatyki bezkontekstowe, boost::spirit...365 8.4. Podsumowanie................................. 370 9. Łączenie C++ z innymi językami programowania 371 9.1. Łączenie C i C++............................... 372 9.2. Biblioteki ładowane dynamicznie....................... 374 9.3. C++ i Python................................. 378 9.3.1. Rozszerzanie Pythona w C++.................... 379 9.3.2. Osadzanie Pythona w C++...................... 381 9.4. C++ i Java................................... 381 9.5. Podsumowanie................................. 382 Odpowiedzi do ćwiczeń 383 Indeks 386 Bibliografia 386