C Receptury.pdf

(256 KB) Pobierz
C++. Receptury
IDZ DO
PRZYK£ADOW Y ROZDZIA£
C++. Receptury
SPIS TREŒCI
KATALOG KSI¥¯EK
Autorzy: D. Ryan Stephens, Christopher
Diggins, Jonathan Turkanis, Jeff Cogswell
T³umaczenie: Przemys³aw Szeremiota
ISBN: 83-246-0374-3
Tytu³ orygina³ u: C++ Cookbook
Format: B5, stron: 560
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
DODAJ DO KOSZYKA
Zbiór rozwi¹zañ dla programistów C++
• Operacje na klasach i obiektach
Obs³uga b³êdów i wyj¹tków
Przetwarzanie dokumentów XML
C++ jest jednym z najpopularniejszych jêzyków programowania. Jego implementacje
dostêpne s¹ praktycznie dla wszystkich platform systemowych. Programiœci
pos³uguj¹cy siê jêzykiem C++ napisali setki tysiêcy aplikacji. Codziennie jednak staj¹
przed koniecznoœci¹ rozwi¹zywania podobnych problemów, zwi¹zanych na przyk³ad
z przetwarzaniem dat, manipulowaniem ci¹gami tekstowymi czy stosowaniem
standardowych kontenerów. W takich sytuacjach na pewno zadaj¹ sobie pytanie —
czy warto ponownie wymyœlaæ ko³o? Przecie¿ gotowe rozwi¹zania znacznie
przyspieszy³yby pracê.
Ksi¹¿ka „C++. Receptury” mo¿e pe³niæ funkcjê skarbnicy porad dla programistów.
Znajdziesz w niej rozwi¹zania problemów, z jakimi spotykasz siê w codziennej pracy.
Ka¿da analiza uzupe³niona jest przyk³adowym kodem Ÿród³owym, który mo¿na
wykorzystaæ we w³asnych projektach. Autorzy po³o¿yli szczególny nacisk na prostotê
i przenoœnoœæ kodu oraz wykorzystanie, tam gdzie to mo¿liwe, biblioteki standardowej.
Kompilowanie aplikacji
W³aœciwa organizacja kodu Ÿród³owego
Operacje na liczbach, tekstach i datach
Stosowanie kontenerów
Programowanie obiektowe
Przetwarzanie plików
Strumienie
Operacje matematyczne i statystyczne
Wielow¹tkowoœæ i biblioteka Boost
Praca z dokumentami XML
Przyspiesz pracê nad aplikacj¹, stosuj¹c gotowe i sprawdzone rozwi¹zania
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
ONOWOŒ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
400222816.002.png 400222816.003.png 400222816.004.png 400222816.005.png
Wstęp .............................................................................................................................. 9
1. Tworzenie aplikacji w języku C++ ................................................................................15
1.0. Wprowadzenie do systemów kompilacji
15
1.1. Pobieranie i instalowanie GCC
28
1.2. Kompilowanie programu „Hello, World!” w wierszu poleceń
31
1.3. Kompilowanie biblioteki statycznej w wierszu poleceń
36
1.4. Kompilowanie biblioteki dynamicznej w wierszu poleceń
38
1.5. Kompilowanie aplikacji wieloskładnikowej w wierszu poleceń
45
1.6. Instalowanie pakietu Boost.Build
50
1.7. Kompilowanie programu „Hello, World!” za pomocą Boost.Build
52
1.8. Kompilowanie biblioteki statycznej za pomocą Boost.Build
56
1.9. Kompilowanie biblioteki dynamicznej za pomocą Boost.Build
57
1.10. Kompilowanie aplikacji wieloskładnikowej za pomocą Boost.Build
58
1.11. Kompilowanie biblioteki statycznej w IDE
61
1.12. Kompilowanie biblioteki dynamicznej w IDE
64
1.13. Kompilowanie aplikacji wieloskładnikowej w IDE
68
1.14. Pobieranie i instalowanie GNU make
73
1.15. Kompilowanie programu „Hello, World!” za pomocą GNU make
75
1.16. Kompilowanie biblioteki statycznej za pomocą GNU make
82
1.17. Kompilowanie biblioteki dynamicznej za pomocą GNU make
87
1.18. Kompilowanie aplikacji wieloskładnikowej za pomocą GNU make
88
1.19. Definiowanie symboli (makrodefinicji)
92
1.20. Ustalanie opcji wiersza polecenia w IDE
94
1.21. Kompilacja próbna
95
1.22. Kompilacja ostateczna
98
1.23. Wybieranie wersji biblioteki wykonawczej
101
1.24. Wymuszanie zgodności ze standardem języka C++
104
1.25. Automatyzacja konsolidacji pliku źródłowego z wybraną biblioteką
107
1.26. Korzystanie z szablonów eksportowanych
109
3
400222816.001.png
2. Organizacja kodu ......................................................................................................... 113
2.0. Wprowadzenie
113
2.1. Gwarantowanie jednokrotnego włączenia pliku nagłówkowego
114
2.2. Gwarantowanie obecności jednego egzemplarza zmiennej
dla wielu plików źródłowych 116
2.3. Ograniczanie włączania nagłówków za pomocą deklaracji zapowiadających 117
2.4. Unikanie kolizji nazw za pomocą przestrzeni nazw
119
2.5. Włączanie pliku funkcji inline
125
3. Liczby ............................................................................................................................127
3.0. Wprowadzenie
127
3.1. Konwersja ciągu na typ liczbowy
127
3.2. Konwersja liczb na ciągi
130
3.3. Sprawdzanie, czy ciąg zawiera poprawną liczbę
133
3.4. Porównywanie wartości zmiennoprzecinkowych
w zadanym zakresie dokładności
135
3.5. Przetwarzanie ciągu zawierającego liczbę w zapisie naukowym
137
3.6. Konwersja pomiędzy typami liczbowymi
139
3.7. Określanie granicznych wartości typów liczbowych
141
4. Ciągi i teksty ................................................................................................................ 145
4.0. Wprowadzenie
145
4.1. Dopełnianie ciągu
146
4.2. Przycinanie ciągu
147
4.3. Zapisywanie ciągów w sekwencji
152
4.4. Określanie długości ciągu
155
4.5. Odwracanie ciągu
157
4.6. Podział ciągu
158
4.7. Wyodrębnianie elementów leksykalnych
160
4.8. Scalanie sekwencji ciągów
163
4.9. Wyszukiwanie w ciągach
165
4.10. Szukanie n-tego wystąpienia podciągu
168
4.11. Usuwanie podciągu z ciągu
169
4.12. Zmiana wielkości liter w ciągu
171
4.13. Porównywanie ciągów bez uwzględniania wielkości liter
173
4.14. Wyszukiwanie w ciągu bez uwzględniania wielkości liter
175
4.15. Zamiana tabulacji na spacje w pliku tekstowym
177
4.16. Zawijanie wierszy w pliku tekstowym
179
4.17. Zliczanie znaków, słów i wierszy w pliku tekstowym
181
4.18. Zliczanie wystąpień poszczególnych słów w pliku tekstowym
184
4.19. Ustawianie marginesów w pliku tekstowym
186
4.20. Justowanie tekstu w pliku
189
4
Spis treści
4.21. Eliminowanie nadmiarowych znaków odstępu w pliku tekstowym
191
4.22. Autokorekta tekstu przy zmianach bufora
192
4.23. Wczytywanie danych z pliku wartości rozdzielanych przecinkami
195
4.24. Podział ciągu na podstawie wyrażeń regularnych
197
5. Daty i godziny ............................................................................................................. 199
5.0. Wprowadzenie
199
5.1. Odczytywanie bieżącej daty i godziny
199
5.2. Formatowanie ciągów reprezentujących daty i godziny
202
5.3. Arytmetyka dat i godzin
204
5.4. Konwersja pomiędzy strefami czasowymi
206
5.5. Określanie numeru dnia w roku
207
5.6. Definiowanie typów wartości ograniczonych do zakresu
209
6. Gospodarowanie danymi — kontenery .................................................................... 213
6.0. Wprowadzenie
213
6.1. Kontenery zamiast tablic
214
6.2. Efektywne stosowanie wektorów
218
6.3. Kopiowanie wektora
222
6.4. Przechowywanie wskaźników w wektorze
224
6.5. Przechowywanie obiektów na liście
225
6.6. Kojarzenie danych z ciągami znaków
230
6.7. Kontenery haszowane
235
6.8. Sekwencje uporządkowane
240
6.9. Kontenery w kontenerach
243
7. Algorytmy ................................................................................................................... 247
7.0. Wprowadzenie
247
7.1. Przeglądanie zawartości kontenera
248
7.2. Usuwanie obiektów z kontenera
254
7.3. Tworzenie sekwencji pseudolosowych
257
7.4. Porównywanie zakresów
259
7.5. Scalanie danych
262
7.6. Sortowanie zakresu elementów
266
7.7. Partycjonowanie zakresu
268
7.8. Przetwarzanie sekwencji za pomocą operacji dla zbiorów
270
7.9. Przekształcanie elementów sekwencji
273
7.10. Własne algorytmy uogólnione
275
7.11. Wypisywanie elementów zakresu do strumienia
278
Spis treści
5
8. Klasy ............................................................................................................................ 283
8.0. Wprowadzenie
283
8.1. Inicjalizowanie składowych klas
284
8.2. Tworzenie obiektów w funkcjach (wzorzec Factory)
287
8.3. Konstruktory i destruktory w służbie zarządzania zasobami (RAII)
289
8.4. Automatyczne dodawanie nowych egzemplarzy klasy do kontenera
291
8.5. Jedna kopia składowej klasy
293
8.6. Określanie dynamicznego typu obiektu
295
8.7. Wykrywanie zależności pomiędzy klasami różnych obiektów
297
8.8. Nadawanie identyfikatorów egzemplarzom klas
298
8.9. Tworzenie klasy-jedynaka
301
8.10. Tworzenie interfejsu z abstrakcyjną klasą bazową
303
8.11. Pisanie szablonu klasy
307
8.12. Pisanie szablonu funkcji
312
8.13. Przeciążanie operatorów inkrementacji i dekrementacji
314
8.14. Przeciążanie operatorów arytmetycznych i operatorów przypisania
pod kątem intuicyjności zachowania obiektów klasy
317
8.15. Wywoływanie funkcji wirtualnej klasy bazowej
323
9. Wyjątki i bezpieczeństwo .......................................................................................... 325
9.0. Wprowadzenie
325
9.1. Tworzenie klasy wyjątku
325
9.2. Uodpornianie konstruktora klasy
329
9.3. Uodpornianie listy inicjalizacyjnej konstruktora
332
9.4. Uodpornianie metod klasy
335
9.5. Bezpieczne kopiowanie obiektu
339
10. Strumienie i pliki ......................................................................................................... 345
10.0. Wprowadzenie
345
10.1. Wyrównywanie tekstu w kolumnach
346
10.2. Formatowanie wartości zmiennoprzecinkowych
350
10.3. Pisanie własnego manipulatora strumienia
353
10.4. Adaptacja klasy do zapisu obiektów do strumienia
356
10.5. Adaptacja klasy do odczytu obiektów ze strumienia
359
10.6. Pozyskiwanie informacji o pliku
361
10.7. Kopiowanie pliku
363
10.8. Usuwanie i zmiana nazwy pliku
366
10.9. Tymczasowe nazwy plików i pliki tymczasowe
368
10.10. Tworzenie katalogu
370
10.11. Usuwanie katalogu
372
10.12. Przeglądanie zawartości katalogu
374
6
Spis treści
Zgłoś jeśli naruszono regulamin