thinking in c++. edycja polska. tom 2 full.pdf

(16193 KB) Pobierz
6
Thinking in C++. Edycja polska. Tom 2
Rozdział 2. Programowanie defensywne ............................................................. 59
Asercje...............................................................................................................................61
Najprostszy system testów jednostkowych, który ma szansę zadziałać ...........................65
Automatyczne testowanie ...........................................................................................66
Szkielet TestSuite........................................................................................................70
Zestawy testowe..........................................................................................................73
Kod szkieletu testowego .............................................................................................74
Techniki usuwania błędów................................................................................................79
Makra śledzące............................................................................................................79
Plik śladu.....................................................................................................................80
Znajdowanie wycieków pamięci.................................................................................81
Podsumowanie ..................................................................................................................86
Ćwiczenia ..........................................................................................................................86
Część II
Standardowa biblioteka C++...........................................91
Czym jest łańcuch?............................................................................................................94
Tworzenie i inicjalizacja łańcuchów C++...........................................................................95
Operacje na łańcuchach.....................................................................................................98
Dodawanie, wstawianie i łączenie łańcuchów............................................................98
Podmiana znaków łańcucha......................................................................................100
Sklejanie za pomocą przecią onych operatorów spoza klasy...................................103
Szukanie w łańcuchach ...................................................................................................104
Znajdowanie od końca ..............................................................................................107
Znajdowanie pierwszego i ostatniego ze zbioru znaków..........................................109
Usuwanie znaków z łańcuchów ................................................................................111
Porównywanie łańcuchów ........................................................................................112
Łańcuchy a znaki ......................................................................................................116
Przykład zastosowania łańcuchów ..................................................................................121
Podsumowanie ................................................................................................................125
Ćwiczenia ........................................................................................................................126
Rozdział 3. Wszystko o łańcuchach.................................................................... 93
Rozdział 4. Strumienie wejścia-wyjścia............................................................. 129
Po co nowa biblioteka? ...................................................................................................129
Iostream przybywa z odsieczą.........................................................................................133
Wstawianie i pobieranie............................................................................................134
Typowe zastosowania ...............................................................................................137
Dane wejściowe pobierane wierszami ......................................................................139
Obsługa błędów strumieni...............................................................................................140
Strumienie związane z plikami .......................................................................................143
Przykład przetwarzania pliku....................................................................................143
Tryby otwarcia ..........................................................................................................145
Buforowanie strumieni....................................................................................................146
Przeszukiwanie strumieni wejścia-wyjścia .....................................................................148
Strumienie powiązane z łańcuchami ...............................................................................151
Łańcuchowe strumienie wejściowe ..........................................................................152
Łańcuchowe strumienie wyjściowe ..........................................................................153
Formatowanie strumieni wyjściowych............................................................................156
Flagi formatujące ......................................................................................................156
Pola formatujące .......................................................................................................158
Szerokość, wypełnienie, dokładność ........................................................................159
Kompletny przykład..................................................................................................160
Spis treści
7
Manipulatory ...................................................................................................................162
Manipulatory z argumentami....................................................................................163
Tworzenie manipulatorów ........................................................................................166
Efektory.....................................................................................................................167
Przykłady wykorzystujące iostream................................................................................169
Zarządzanie kodem źródłowym biblioteki klas ........................................................169
Wykrywanie błędów kompilatora.............................................................................173
Prosty rejestrator danych...........................................................................................175
Obsługa wielu języków ...................................................................................................179
Strumienie znaków szerokich ...................................................................................179
Ustawienia lokalne....................................................................................................181
Podsumowanie ................................................................................................................183
Ćwiczenia ........................................................................................................................183
Rozdział 5. Wszystko o szablonach .................................................................. 187
Parametry szablonów ......................................................................................................187
Parametry szablonów niebędące typami...................................................................188
Domyślne argumenty szablonów..............................................................................190
Szablony jako parametry szablonów ........................................................................191
Słowo kluczowe typename .......................................................................................196
U ycie słowa kluczowego template jako wskazówki...............................................198
Szablony składowe....................................................................................................199
Szablony funkcji..............................................................................................................201
Dedukowanie typu argumentów szablonu funkcji....................................................202
Przecią anie szablonów funkcji................................................................................205
Pobieranie adresu wygenerowanej z szablonu funkcji .............................................206
Stosowanie funkcji do sekwencji STL......................................................................209
Częściowe uporządkowanie szablonów funkcji .......................................................212
Specjalizacja szablonów..................................................................................................213
Specjalizacja jawna...................................................................................................214
Specjalizacja częściowa ............................................................................................215
Przykład praktyczny..................................................................................................217
Unikanie nadmiarowego kodu ..................................................................................220
Odszukiwanie nazw.........................................................................................................224
Nazwy w szablonach.................................................................................................224
Szablony i funkcje zaprzyjaźnione ...........................................................................228
Idiomy programowania za pomocą szablonów...............................................................233
Cechy charakterystyczne ..........................................................................................233
Reguły .......................................................................................................................238
Tajemniczo powtarzający się wzorzec szablonów ...................................................240
Szablony i metaprogramowanie ......................................................................................242
Programowanie na poziomie kompilacji ..................................................................243
Szablony wyra eń .....................................................................................................251
Modele kompilacji szablonów ........................................................................................256
Model włączania .......................................................................................................256
Ukonkretnianie jawne ...............................................................................................257
Model separacji.........................................................................................................259
Podsumowanie ................................................................................................................260
Ćwiczenia ........................................................................................................................261
Rozdział 6. Algorytmy uogólnione..................................................................... 265
Algorytmy uogólnione — wprowadzenie ..........................................................................265
Predykaty ..................................................................................................................268
Iteratory strumieni.....................................................................................................270
Zło oność algorytmu ................................................................................................272
8
Thinking in C++. Edycja polska. Tom 2
Obiekty funkcyjne ...........................................................................................................274
Klasyfikacja obiektów funkcyjnych .........................................................................275
Automatyczne tworzenie obiektów funkcyjnych......................................................276
Adaptowalność obiektów funkcyjnych.....................................................................279
Więcej przykładów wykorzystania obiektów funkcyjnych ......................................281
Adaptery wskaźników do funkcji .............................................................................287
Pisanie własnych adapterów obiektów funkcyjnych ................................................293
Katalog algorytmów STL................................................................................................297
Narzędzia przydatne w tworzeniu przykładów.........................................................299
Wypełnianie i generowanie sekwencji......................................................................303
Zliczanie....................................................................................................................304
Manipulowanie sekwencjami....................................................................................305
Wyszukiwanie i zastępowanie elementów................................................................310
Porównywanie sekwencji..........................................................................................316
Usuwanie elementów sekwencji ...............................................................................319
Sortowanie i operacje na sekwencjach posortowanych ............................................322
Operacje na stertach..................................................................................................331
Wykonywanie operacji na wszystkich elementach sekwencji..................................332
Algorytmy numeryczne ............................................................................................339
Narzędzia ..................................................................................................................342
Tworzenie własnych algorytmów uogólnionych ............................................................343
Podsumowanie ................................................................................................................345
Ćwiczenia ........................................................................................................................345
Rozdział 7. Kontenery...................................................................................... 351
Kontenery i iteratory .......................................................................................................351
Dokumentacja biblioteki STL...................................................................................353
Wprowadzenie.................................................................................................................353
Kontenery przechowujące ciągi znakowe.................................................................358
Dziedziczenie po kontenerach STL ..........................................................................360
Kraina iteratorów.............................................................................................................362
Iterator w kontenerach dwukierunkowych................................................................364
Kategorie iteratorów .................................................................................................365
Iteratory predefiniowane...........................................................................................367
Kontenery sekwencyjne: vector, list i deque...................................................................373
Podstawowe operacje na kontenerach sekwencyjnych .................................................373
Kontener typu vector.................................................................................................376
Kontener typu deque .................................................................................................383
Konwersja sekwencji ................................................................................................385
Kontrolowany dostęp swobodny...............................................................................387
Kontener typu list......................................................................................................388
Wymienianie całych sekwencji.................................................................................393
Kontener typu set ............................................................................................................394
Klasa iteratora słów...................................................................................................397
Szablon stack...................................................................................................................402
Szablon queue .................................................................................................................405
Kolejki priorytetowe .......................................................................................................410
Przechowywanie bitów ...................................................................................................418
Typ bitset<n> ............................................................................................................419
Typ vector<bool> .....................................................................................................422
Kontenery asocjacyjne ....................................................................................................424
Generowanie elementów i wypełnianie kontenerów asocjacyjnych ........................428
Magia kontenerów typu map ....................................................................................431
Kontener typu multimap ...........................................................................................433
Kontener typu multiset..............................................................................................436
Spis treści
9
Korzystanie z wielu kontenerów STL.............................................................................439
Czyszczenie kontenera wskaźników ...............................................................................442
Tworzenie własnych kontenerów....................................................................................444
Rozszerzenia biblioteki STL ...........................................................................................446
Kontenery spoza STL......................................................................................................448
Podsumowanie ................................................................................................................452
Ćwiczenia ........................................................................................................................453
Część III Zagadnienia zaawansowane .........................................457
Rozdział 8. Rozpoznawanie typu w czasie wykonania programu......................... 459
Rzutowanie w czasie wykonania.....................................................................................459
Operator typeid................................................................................................................464
Rzutowanie na pośrednie poziomy hierarchii klas ...................................................466
Wskaźniki na typ void ..............................................................................................467
RTTI a szablony........................................................................................................468
Wielodziedziczenie .........................................................................................................469
Zastosowania mechanizmu RTTI....................................................................................470
Sortownia odpadków ................................................................................................471
Implementacja i narzuty mechanizmu RTTI...................................................................475
Podsumowanie ................................................................................................................475
Ćwiczenia ........................................................................................................................476
Rozdział 9. Wielodziedziczenie ......................................................................... 479
Wprowadzenie do wielodziedziczenia ............................................................................479
Dziedziczenie interfejsu ..................................................................................................481
Dziedziczenie implementacji ..........................................................................................484
Duplikaty podobiektów ...................................................................................................489
Wirtualne klasy bazowe ..................................................................................................493
Wyszukiwanie nazw........................................................................................................502
Unikanie wielodziedziczenia...........................................................................................504
Rozszerzanie interfejsu ...................................................................................................506
Podsumowanie ................................................................................................................509
Ćwiczenia ........................................................................................................................510
Rozdział 10. Wzorce projektowe ........................................................................ 513
Pojęcie wzorca.................................................................................................................513
Wy szość kompozycji nad dziedziczeniem..............................................................515
Klasyfikacja wzorców .....................................................................................................515
Właściwości, pojęcia, wzorce ...................................................................................516
Upraszczanie pojęć..........................................................................................................516
Posłaniec ...................................................................................................................517
Parametr zbiorczy .....................................................................................................518
Singleton..........................................................................................................................519
Odmiany Singletona..................................................................................................520
Polecenie — wybór operacji ...........................................................................................524
Polecenia izolujące obsługę zdarzeń.........................................................................526
Izolowanie obiektów .......................................................................................................529
Pośrednik — dostęp do innego obiektu ....................................................................529
Stan — modyfikowanie czynności obiektu ..............................................................531
Adapter ............................................................................................................................532
Metoda szablonowa.........................................................................................................535
Strategia — dynamiczny wybór algorytmu ....................................................................536
Łańcuch odpowiedzialności — wypróbowywanie sekwencji strategii ................................537
Zgłoś jeśli naruszono regulamin