C Sztuka programowania.pdf

(342 KB) Pobierz
C:\Andrzej\PDF\ABC nagrywania p³yt CD\1 strona.cdr
IDZ DO
PRZYK£ADOW Y ROZDZIA£
C++. Sztuka
SPIS TRECI
programowania
KATALOG KSI¥¯EK
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
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
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¹tkowoci 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 powiê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 powiêcone
programowaniu zosta³y sprzedane w 3 milionach egzemplarzy na ca³ym wiecie
i przet³umaczone na kilkanacie jêzyków.
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWOCIACH
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
319877779.001.png 319877779.002.png 319877779.003.png 319877779.004.png
 
Spis treci
O Autorze ..........................................................................................9
Wstp .............................................................................................11
Rozdział 1. Potga C++.....................................................................................13
Zwizła, lecz bogata składnia.......................................................................................... 14
Potne biblioteki............................................................................................................ 14
Biblioteka szablonów STL .............................................................................................. 15
Programista ma władz.................................................................................................... 16
Precyzyjne sterowanie..................................................................................................... 17
Przeci&anie operatorów.................................................................................................. 17
Przejrzysty, zwizły model obiektowy ............................................................................ 18
Dziedzictwo C++............................................................................................................. 18
Rozdział 2. Prosty mechanizm odzyskiwania pamici dla jzyka C++...................21
Porównanie dwóch metod zarz&dzania pamici&............................................................. 22
Plusy i minusy rcznego zarz&dzania pamici&......................................................... 23
Plusy i minusy mechanizmu odzyskiwania pamici.................................................. 24
Moesz mie1 obie metody......................................................................................... 25
Tworzenie mechanizmu odzyskiwania pamici w jzyku C++ ....................................... 25
Zrozumienie problemu .............................................................................................. 26
Wybór algorytmu odzyskiwania pamici ........................................................................ 26
Zliczanie referencji.................................................................................................... 27
Znacz i zamiataj ........................................................................................................ 27
Kopiowanie ............................................................................................................... 27
Który algorytm wybra1?............................................................................................ 28
Implementowanie mechanizmu odzyskiwania pamici............................................. 28
Wielow&tkowy czy nie? ............................................................................................ 29
Kiedy odzyskiwa1 pami1?....................................................................................... 29
Co z auto_ptr? ........................................................................................................... 30
Prosty mechanizm odzyskiwania pamici w C++ ........................................................... 31
Omówienie klas mechanizmu odzyskiwania pamici ............................................... 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 pamici 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 uywa1 klasy GCPtr? ................................................................................................ 57
Obsługa wyj&tków alokacji pamici.......................................................................... 58
Bardziej interesuj&cy przykład .................................................................................. 59
Alokowanie i porzucanie obiektów........................................................................... 61
Alokowanie tablic ..................................................................................................... 63
Uycie GCPtr z typami klasowymi ........................................................................... 65
Wikszy program demonstracyjny ............................................................................ 67
Testowanie obci&enia .............................................................................................. 72
Kilka ograniczeC ....................................................................................................... 74
Pomysły do wypróbowania ............................................................................................. 75
Rozdział 3. Wielow%tkowo&' w C++...................................................................77
Czym jest wielow&tkowoD1? ........................................................................................... 78
Wielow&tkowoD1 zmienia architektur programu ..................................................... 78
Dlaczego jzyk C++ nie ma wbudowanej obsługi mechanizmu wielow&tkowoDci? ....... 79
Jaki system operacyjny i kompilator wybra1? ................................................................. 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 dostpne 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 pamici ....................................................... 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 dostpu do listy gclist .................................................................... 111
Dwie inne zmiany ................................................................................................... 112
Kompletny kod wielow&tkowego mechanizmu odzyskiwania pamici .................. 112
Uycie wielow&tkowego mechanizmu odzyskiwania pamici................................ 123
Pomysły do wypróbowania ........................................................................................... 128
Rozdział 4. Rozszerzanie jzyka C++................................................................129
Dlaczego naley uy1 translatora?................................................................................. 129
Eksperymentalne słowa kluczowe................................................................................. 131
Ptla foreach............................................................................................................ 131
Wyraenie cases...................................................................................................... 132
Spis treci
5
Operator typeof ....................................................................................................... 133
Ptla repeat-until ..................................................................................................... 134
Translator eksperymentalnych elementów jzyka C++ ................................................. 135
Uycie translatora.......................................................................................................... 143
Jak działa translator? ..................................................................................................... 144
Deklaracje globalne................................................................................................. 144
Funkcja main() ........................................................................................................ 145
Funkcje gettoken() i skipspaces()............................................................................ 146
Przekształcanie ptli foreach................................................................................... 149
Przekształcanie wyraenia cases ............................................................................. 152
Przekształcanie operatora typeof............................................................................. 154
Przekształcanie ptli 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 Dci&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 Dci&gania plików ...................................................... 181
Program prezentuj&cy działanie podsystemu do Dci&gania plików ................................ 181
Program do Dci&gania plików z graficznym interfejsem uytkownika........................... 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 poyczki...................................................................................................... 192
Obliczanie przyszłej wartoDci lokaty ............................................................................. 193
Obliczanie pocz&tkowej wartoDci inwestycji
wymaganej do otrzymania po&danej przyszłej wartoDci............................................ 195
Obliczanie pocz&tkowej wartoDci inwestycji
wymaganej do otrzymania okreDlonych wypłat .......................................................... 196
Obliczanie maksymalnej wielkoDci regularnej wypłaty z danej lokaty.......................... 198
Obliczanie wartoDci 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
WyDwietlanie 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&zaC ....................................................................................... 231
Usuwanie Dcieki..................................................................................................... 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 jzyka 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 jzyka C++ ..................................................................................... 294
Wyraenia jzyka C++............................................................................................ 295
Definiowanie wyraenia.......................................................................................... 295
Parser wyraeC .............................................................................................................. 297
Kod ?ródłowy parsera ............................................................................................. 297
Wyodrbnianie elementów leksykalnych z kodu ?ródłowego................................. 309
WyDwietlanie błdów składniowych ....................................................................... 314
Obliczanie wyraenia .............................................................................................. 315
Interpreter Mini C++ ..................................................................................................... 317
Funkcja main() ........................................................................................................ 334
Wstpny przegl&d kodu........................................................................................... 335
Funkcja interp()....................................................................................................... 339
Obsługa zmiennych lokalnych ................................................................................ 341
Wywoływanie funkcji zdefiniowanych przez uytkownika .................................... 343
Przypisywanie wartoDci zmiennym ......................................................................... 345
Wykonywanie instrukcji if ...................................................................................... 347
Zgłoś jeśli naruszono regulamin