C_Sztuka_programowania_cpszpr.pdf

(332 KB) Pobierz
IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI
KATALOG KSI¥¯EK
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
C++. Sztuka
programowania
Autor: Herbert Schildt
T³umaczenie: Ma³gorzata Koziej (rozdz. 2), Marcin Miklas
(rozdz. 2, 7, 9), Marcin Samodulski (rozdz. 1, 3 – 6, 8)
ISBN: 83-7361-679-9
Tytu³ orygina³u:
The Art of C++
Format: B5, stron: 384
TWÓJ KOSZYK
DODAJ DO KOSZYKA
Poznaj profesjonalne techniki programistyczne
Ksi¹¿ka „C++. Sztuka programowania” przedstawia profesjonalne sposoby tworzenia
aplikacji w jêzyku C++. Nie opisuje podstaw jêzyka — skupia siê na tworzeniu
praktycznych aplikacji z wykorzystaniem profesjonalnych technik programistycznych.
Wykonuj¹c zawarte w ksi¹¿ce przyk³ady, rozwi¹¿esz ró¿ne zadania programistyczne
i osi¹gniesz bieg³o æ w pos³ugiwaniu siê jêzykiem C++.
• Szablony STL, biblioteki i model obiektowy jêzyka C++
• Mechanizm odzyskiwania pamiêci
• Wykorzystanie wielow¹tkowo ci w aplikacjach
• Eksperymentalne elementy jêzyka C++
• Aplikacje internetowe w C++
• Techniki sztucznej inteligencji
• Tworzenie w³asnego interpretera C++
O Autorze:
Herbert Schildt
jest jednym z najpoczytniejszych autorów ksi¹¿ek po wiêconych
programowaniu, konkretnie jêzykom C, C++, Java i C#. By³ cz³onkiem komitetu
ANSI/ISO, który dokona³ standaryzacji jêzyka C++. Jego ksi¹¿ki po wiêcone
programowaniu zosta³y sprzedane w 3 milionach egzemplarzy na ca³ym wiecie
i przet³umaczone na kilkana cie jêzyków.
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWO CIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
O Autorze .......................................................................................... 9
Wstęp ............................................................................................. 11
Rozdział 1. Potęga C++ ..................................................................................... 13
Zwięzła, lecz bogata składnia.......................................................................................... 14
Potę ne biblioteki............................................................................................................ 14
Biblioteka szablonów STL .............................................................................................. 15
Programista ma władzę.................................................................................................... 16
Precyzyjne sterowanie ..................................................................................................... 17
Przecią anie operatorów.................................................................................................. 17
Przejrzysty, zwięzły model obiektowy ............................................................................ 18
Dziedzictwo C++............................................................................................................. 18
Rozdział 2. Prosty mechanizm odzyskiwania pamięci dla języka C++................... 21
Porównanie dwóch metod zarządzania pamięcią............................................................. 22
Plusy i minusy ręcznego zarządzania pamięcią......................................................... 23
Plusy i minusy mechanizmu odzyskiwania pamięci.................................................. 24
Mo esz mieć obie metody......................................................................................... 25
Tworzenie mechanizmu odzyskiwania pamięci w języku C++ ....................................... 25
Zrozumienie problemu .............................................................................................. 26
Wybór algorytmu odzyskiwania pamięci ........................................................................ 26
Zliczanie referencji.................................................................................................... 27
Znacz i zamiataj ........................................................................................................ 27
Kopiowanie ............................................................................................................... 27
Który algorytm wybrać?............................................................................................ 28
Implementowanie mechanizmu odzyskiwania pamięci............................................. 28
Wielowątkowy czy nie? ............................................................................................ 29
Kiedy odzyskiwać pamięć? ....................................................................................... 29
Co z auto_ptr? ........................................................................................................... 30
Prosty mechanizm odzyskiwania pamięci w C++ ........................................................... 31
Omówienie klas mechanizmu odzyskiwania pamięci ............................................... 41
GCPtr szczegółowo ......................................................................................................... 42
Zmienne składowe klasy GCPtr ................................................................................ 43
Funkcja findPtrInfo() ................................................................................................ 44
Definicja typu GCiterator.......................................................................................... 44
Konstruktor klasy GCPtr........................................................................................... 44
Destruktor klasy GCPtr ............................................................................................. 46
4
C++. Sztuka programowania
Odzyskiwanie pamięci za pomocą funkcji collect() .................................................. 46
Przecią one operatory przypisania ............................................................................ 48
Konstruktor kopiujący klasy GCPtr .......................................................................... 50
Operatory wskaźnikowe i funkcja konwertująca....................................................... 51
Funkcje begin() i end().............................................................................................. 52
Funkcja shutdown()................................................................................................... 53
Dwie funkcje pomocnicze ......................................................................................... 53
Klasa GCInfo................................................................................................................... 54
Klasa Iter ......................................................................................................................... 55
Jak u ywać klasy GCPtr? ................................................................................................ 57
Obsługa wyjątków alokacji pamięci.......................................................................... 58
Bardziej interesujący przykład .................................................................................. 59
Alokowanie i porzucanie obiektów ........................................................................... 61
Alokowanie tablic ..................................................................................................... 63
U ycie GCPtr z typami klasowymi ........................................................................... 65
Większy program demonstracyjny ............................................................................ 67
Testowanie obcią enia .............................................................................................. 72
Kilka ograniczeń ....................................................................................................... 74
Pomysły do wypróbowania ............................................................................................. 75
Rozdział 3. Wielowątkowość w C++................................................................... 77
Czym jest wielowątkowość? ........................................................................................... 78
Wielowątkowość zmienia architekturę programu ..................................................... 78
Dlaczego język C++ nie ma wbudowanej obsługi mechanizmu wielowątkowości? ....... 79
Jaki system operacyjny i kompilator wybrać? ................................................................. 80
Przegląd funkcji obsługi wątków w Windows................................................................. 81
Tworzenie i zatrzymywanie wątku............................................................................ 81
Inne funkcje obsługi wątków dostępne w Visual C++ .............................................. 82
Wstrzymywanie i wznawianie wątku........................................................................ 84
Zmiana priorytetu wątku ........................................................................................... 84
Pobieranie uchwytu głównego wątku........................................................................ 86
Zagadnienie synchronizacji....................................................................................... 86
Tworzenie panelu kontrolnego wątków........................................................................... 90
Panel kontrolny wątku............................................................................................... 91
Panel kontrolny wątku pod lupą................................................................................ 95
Prezentacja działania panelu kontrolnego ............................................................... 101
Wielowątkowy mechanizm odzyskiwania pamięci ....................................................... 106
Dodatkowe zmienne składowe................................................................................ 107
Konstruktor wielowątkowej klasy GCPtr................................................................ 107
Wyjątek TimeOutExc.............................................................................................. 109
Wielowątkowy destruktor klasy GCPtr................................................................... 110
Funkcja gc() ............................................................................................................ 110
Funkcja isRunning()................................................................................................ 111
Synchronizacja dostępu do listy gclist .................................................................... 111
Dwie inne zmiany ................................................................................................... 112
Kompletny kod wielowątkowego mechanizmu odzyskiwania pamięci .................. 112
U ycie wielowątkowego mechanizmu odzyskiwania pamięci................................ 123
Pomysły do wypróbowania ........................................................................................... 128
Rozdział 4. Rozszerzanie języka C++ ................................................................ 129
Dlaczego nale y u yć translatora?................................................................................. 129
Eksperymentalne słowa kluczowe................................................................................. 131
Pętla foreach............................................................................................................ 131
Wyra enie cases ...................................................................................................... 132
Spis treści
5
Operator typeof ....................................................................................................... 133
Pętla repeat-until ..................................................................................................... 134
Translator eksperymentalnych elementów języka C++ ................................................. 135
U ycie translatora.......................................................................................................... 143
Jak działa translator? ..................................................................................................... 144
Deklaracje globalne................................................................................................. 144
Funkcja main() ........................................................................................................ 145
Funkcje gettoken() i skipspaces()............................................................................ 146
Przekształcanie pętli foreach ................................................................................... 149
Przekształcanie wyra enia cases ............................................................................. 152
Przekształcanie operatora typeof............................................................................. 154
Przekształcanie pętli repeat-until............................................................................. 155
Program demonstracyjny............................................................................................... 157
Pomysły do wypróbowania ........................................................................................... 163
Rozdział 5. Program do ściągania plików z internetu ........................................ 165
Biblioteka WinINet ....................................................................................................... 166
Podsystem programu do ściągania pliku z internetu...................................................... 167
Ogólny opis działania.............................................................................................. 171
Funkcja download() ................................................................................................ 172
Funkcja ishttp() ....................................................................................................... 177
Funkcja httpverOK() ............................................................................................... 178
Funkcja getfname() ................................................................................................. 179
Funkcja openfile() ................................................................................................... 179
Funkcja update() ..................................................................................................... 180
Plik nagłówkowy podsystemu do ściągania plików ...................................................... 181
Program prezentujący działanie podsystemu do ściągania plików ................................ 181
Program do ściągania plików z graficznym interfejsem u ytkownika........................... 183
Kod programu WinDL ............................................................................................ 183
Jak działa program WinDL?.................................................................................... 188
Pomysły do wypróbowania ........................................................................................... 190
Rozdział 6. Obliczenia finansowe w C++........................................................... 191
Plan spłaty po yczki...................................................................................................... 192
Obliczanie przyszłej wartości lokaty ............................................................................. 193
Obliczanie początkowej wartości inwestycji
wymaganej do otrzymania po ądanej przyszłej wartości............................................ 195
Obliczanie początkowej wartości inwestycji
wymaganej do otrzymania określonych wypłat .......................................................... 196
Obliczanie maksymalnej wielkości regularnej wypłaty z danej lokaty.......................... 198
Obliczanie wartości pozostałego kredytu ...................................................................... 200
Pomysły do wypróbowania ........................................................................................... 201
Rozdział 7. Rozwiązywanie problemów metodami sztucznej inteligencji ............. 203
Reprezentacja i terminologia......................................................................................... 204
Eksplozje kombinatoryczne........................................................................................... 205
Strategie przeszukiwania ............................................................................................... 207
Ocenianie strategii przeszukiwania ......................................................................... 207
Problem ......................................................................................................................... 208
Reprezentacja graficzna .......................................................................................... 208
Struktura FlightInfo i klasa Search ................................................................................ 209
Przeszukiwanie w głąb .................................................................................................. 211
Funkcja match() ...................................................................................................... 216
Funkcja find().......................................................................................................... 217
Funkcja findroute() ................................................................................................. 218
6
C++. Sztuka programowania
Wyświetlanie trasy .................................................................................................. 219
Analiza przeszukiwania w głąb............................................................................... 220
Przeszukiwanie wszerz.................................................................................................. 220
Analiza przeszukiwania wszerz............................................................................... 223
Dodawanie heurystyk .................................................................................................... 223
Przeszukiwania wspinaczkowe ............................................................................... 224
Analiza przeszukiwania wspinaczkowego .............................................................. 228
Przeszukiwanie najmniejszego kosztu........................................................................... 229
Analiza przeszukiwania najmniejszego kosztu ....................................................... 231
Znajdowanie wielu rozwiązań ....................................................................................... 231
Usuwanie ście ki..................................................................................................... 231
Usuwanie wierzchołków ......................................................................................... 232
Szukanie optymalnego rozwiązania .............................................................................. 238
Wracamy do zgubionych kluczy ................................................................................... 244
Pomysły do wypróbowania ........................................................................................... 247
Rozdział 8. Tworzenie własnego kontenera STL ................................................ 249
Krótkie omówienie biblioteki STL................................................................................ 250
Kontenery................................................................................................................ 250
Algorytmy ............................................................................................................... 251
Iteratory................................................................................................................... 251
Inne składniki biblioteki STL ........................................................................................ 251
Wymagania stawiane definiowanemu kontenerowi ...................................................... 252
Wymagania ogólne ................................................................................................. 252
Dodatkowe wymagania dla kontenerów sekwencyjnych ........................................ 254
Dodatkowe wymagania dla kontenerów asocjacyjnych .......................................... 254
Tworzenie kontenera tablicy dynamicznej ze zmiennymi indeksami............................ 255
Jak działa tablica RangeArray? ............................................................................... 255
Kompletna klasa RangeArray ................................................................................. 257
Klasa RangeArray pod lupą .................................................................................... 266
Kilka programów wykorzystujących tablicę RangeArray ....................................... 279
Pomysły do wypróbowania ..................................................................................... 288
Rozdział 9. Miniinterpreter języka C++............................................................. 289
Interpretery kontra kompilatory..................................................................................... 289
Opis ogólny interpretera Mini C++ ............................................................................... 290
Charakterystyka interpretera Mini C++......................................................................... 291
Ograniczenia interpretera Mini C++ ....................................................................... 293
Nieformalna teoria języka C++ ..................................................................................... 294
Wyra enia języka C++............................................................................................ 295
Definiowanie wyra enia.......................................................................................... 295
Parser wyra eń .............................................................................................................. 297
Kod źródłowy parsera ............................................................................................. 297
Wyodrębnianie elementów leksykalnych z kodu źródłowego................................. 309
Wyświetlanie błędów składniowych ....................................................................... 314
Obliczanie wyra enia .............................................................................................. 315
Interpreter Mini C++ ..................................................................................................... 317
Funkcja main() ........................................................................................................ 334
Wstępny przegląd kodu........................................................................................... 335
Funkcja interp()....................................................................................................... 339
Obsługa zmiennych lokalnych ................................................................................ 341
Wywoływanie funkcji zdefiniowanych przez u ytkownika .................................... 343
Przypisywanie wartości zmiennym ......................................................................... 345
Wykonywanie instrukcji if ...................................................................................... 347
Zgłoś jeśli naruszono regulamin