Jezyk_C_Gotowe_rozwiazania_dla_programistow_cppgot.pdf

(424 KB) Pobierz
IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI
KATALOG KSI¥¯EK
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
Jêzyk C++. Gotowe
rozwi¹zania dla programistów
Autor: Matthew Wilson
T³umaczenie: Zbigniew Banach,
Micha³ Dadan, Tomasz Walczak
ISBN: 83-7361-841-4
Tytu³ orygina³u:
Imperfect C++:
Practical Solutions for Real-Life Programming
Format: B5, stron: 696
TWÓJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWO CIACH
ZAMÓW CENNIK
C++ to popularny i uniwersalny jêzyk programowania. Jednak po d³u¿szym stosowaniu
programi ci zaczynaj¹ zauwa¿aæ pewne jego niedoskona³o ci i ograniczenia. System
typów, sposób dzia³ania niektórych kompilatorów, zwi¹zki pomiêdzy wska nikami
i tablicami, nieprzewidziane w standardzie zachowania obiektów statycznych i bibliotek
dynamicznych to tylko niektóre z nich. Aby je obej æ, nale¿y wykorzystywaæ wiele
bardzo zaawansowanych i nieznanych wielu programistom metod.
Ksi¹¿ka „Jêzyk C++. Gotowe rozwi¹zania dla programistów” to podrêcznik dla tych
programistów C++, którzy zaczêli ju¿ dostrzegaæ ograniczenia tego jêzyka
i zastanawiaj¹ siê, jak sobie z nimi poradziæ. Autor pokazuje sposoby ujarzmienia
z³o¿ono ci jêzyka i uzyskania pe³nej kontroli nad kodem. Przedstawia najpowa¿niejsze
wady C++ i sposoby rozwi¹zywania powodowanych przez nie problemów. Opisuje
równie¿ metody tworzenia stabilniejszego, bardziej uniwersalnego, wydajniejszego
i ³atwiejszego w pielêgnacji kodu.
• Wymuszanie za³o¿eñ projektowych
• Cykl ¿ycia obiektów
• Hermetyzacja zasobów, danych i typów
• Modele dostêpu do obiektów
• Obs³uga w¹tków
• Korzystanie z obiektów statycznych
• Konwersja danych i typów
• Zarz¹dzanie pamiêci¹
• Sterowanie dzia³aniem kompilatora
Wszyscy programi ci, niezale¿nie od stopnia zaawansowania, znajd¹ w tej ksi¹¿ce
wiadomo ci, które usprawni¹ i przyspiesz¹ ich pracê.
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
Przedmowa ..................................................................................... 11
Prolog. Filozofia praktyka niedoskonałego ....................................... 19
Niedoskonałości, ograniczenia, definicje i zalecenia ......................... 29
Część I
Podstawy ......................................................................37
1.1.
1.2.
1.3.
1.4.
Kilka oczywistych mądrości ............................................................................... 40
Kontrakty kompilacji — ograniczenia ................................................................ 41
Kontrakty wykonawcze: warunki wejściowe, końcowe i niezmienniki ............... 49
Asercje ................................................................................................................ 56
Rozdział 1. Wymuszanie założeń projektowych:
ograniczenia, kontrakty i asercje ..................................................... 39
Rozdział 2. Życie obiektów ............................................................................... 67
2.1. Cykl ycia obiektu ............................................................................................... 67
2.2. Kontrola klientów ................................................................................................ 68
2.3. Dobrodziejstwa list inicjalizacji .......................................................................... 73
Rozdział 3. Hermetyzacja zasobów .................................................................... 81
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.
4.8.
4.9.
Poziomy hermetyzacji zasobów .......................................................................... 81
Typy POD ........................................................................................................... 82
Pośrednie typy opakowujące ............................................................................... 84
Typy RRID .......................................................................................................... 87
Typy RAII ........................................................................................................... 92
RAII — podsumowanie ...................................................................................... 95
Poziomy hermetyzacji danych ............................................................................. 98
Typy wartości a typy egzystencjalne ................................................................... 98
Klasyfikacja typów wartości ............................................................................... 99
Typy otwarte ..................................................................................................... 101
Typy hermetyzowane ........................................................................................ 103
Typy wartości .................................................................................................... 104
Arytmetyczne typy wartości .............................................................................. 106
Typy wartości — podsumowanie ...................................................................... 107
Hermetyzacja — podsumowanie ....................................................................... 107
Rozdział 4. Hermetyzacja danych i typy wartości ............................................... 97
6
Język C++. Gotowe rozwiązania dla programistów
Rozdział 5. Modele dostępu do obiektów ........................................................ 113
5.1.
5.2.
5.3.
5.4.
6.1.
6.2.
6.3.
6.4.
Gwarantowany czas ycia ................................................................................. 113
Kopia dla wywołującego ................................................................................... 115
Oryginał dla wywołującego ............................................................................... 116
Obiekty współdzielone ...................................................................................... 116
Wartość ............................................................................................................. 119
Stan ................................................................................................................... 124
API i usługi ....................................................................................................... 128
Mechanizmy języka ........................................................................................... 132
Rozdział 6. Zasięg klas .................................................................................. 119
Część II
Przetrwanie w świecie rzeczywistym ............................135
7.1.
7.2.
7.3.
7.4.
Udostępnianie kodu ........................................................................................... 137
Wymagania ABI C ............................................................................................ 139
Wymagania ABI C++ ....................................................................................... 144
C — i wszystko jasne ........................................................................................ 148
Rozdział 7. ABI .............................................................................................. 137
Rozdział 8. Obiekty bez granic ........................................................................ 157
8.1. Czy by przenośne tabele funkcji wirtualnych? ................................................. 157
8.2. Przenośne tabele vtable ..................................................................................... 161
8.3. Przenośność — podsumowanie ......................................................................... 169
Rozdział 9. Biblioteki dynamiczne ................................................................... 171
9.1.
9.2.
9.3.
9.4.
9.5.
9.6.
10.1.
10.2.
10.3.
10.4.
10.5.
11.1.
11.2.
11.3.
11.4.
11.5.
12.1.
12.2.
12.3.
12.4.
12.5.
Jawne wywołania funkcji .................................................................................. 171
To samość — jednostki i przestrzeń konsolidacji ............................................. 174
Czas ycia ......................................................................................................... 175
Wersjonowanie .................................................................................................. 176
Własność zasobów ............................................................................................ 179
Biblioteki dynamiczne — podsumowanie ......................................................... 180
Synchronizacja dostępu do wartości całkowitych ............................................. 182
Synchronizacja dostępu do bloków kodu — regiony krytyczne ........................ 186
Wydajność operacji atomowych ........................................................................ 190
Rozszerzenia wielowątkowe ............................................................................. 195
TSS — składowanie danych w wątkach ............................................................ 199
Globalne obiekty statyczne ............................................................................... 209
Singletony ......................................................................................................... 214
Lokalne obiekty statyczne funkcji ..................................................................... 222
Składowe statyczne ........................................................................................... 224
Obiekty statyczne — podsumowanie ................................................................ 227
Funkcje inline .................................................................................................... 229
Optymalizacja wartości zwracanej ..................................................................... 231
Optymalizacja pustych klas bazowych .............................................................. 234
Optymalizacja pustych klas potomnych ............................................................ 237
Zapobieganie optymalizacji .............................................................................. 239
Rozdział 10. Wątki ........................................................................................... 181
Rozdział 11. Obiekty statyczne ......................................................................... 207
Rozdział 12. Optymalizacja ............................................................................... 229
Spis treści
7
Część III Kwestie językowe ........................................................243
Rozdział 13. Typy podstawowe ......................................................................... 245
13.1.
13.2.
13.3.
13.4.
14.1.
14.2.
14.3.
14.4.
14.5.
14.6.
14.7.
15.1.
15.2.
15.3.
15.4.
15.5.
16.1.
16.2.
16.3.
16.4.
16.5.
16.6.
16.7.
17.1.
17.2.
17.3.
17.4.
18.1.
18.2.
18.3.
18.4.
18.5.
Komu bajt? ........................................................................................................ 246
Typy całkowitoliczbowe o stałym rozmiarze .................................................... 249
Du e typy całkowitoliczbowe ........................................................................... 255
Typy niebezpieczne ........................................................................................... 257
Nie powtarzaj się ............................................................................................... 263
Degeneracja tablic do wskaźników ................................................................... 265
dimensionof() .................................................................................................... 268
Nie mo na przekazywać tablic do funkcji ......................................................... 270
Tablice są zawsze przekazywane przez adres .................................................... 273
Tablice typów dziedziczonych .......................................................................... 274
Brak tablic wielowymiarowych ......................................................................... 281
NULL — słowo kluczowe, którego nie było ..................................................... 285
Spadek do zera .................................................................................................. 292
Naginanie prawdy ............................................................................................. 294
Literały .............................................................................................................. 296
Stałe .................................................................................................................. 302
interface ............................................................................................................. 311
temporary .......................................................................................................... 314
owner ................................................................................................................. 317
explicit(_cast) .................................................................................................... 321
unique ................................................................................................................ 326
final ................................................................................................................... 327
Nieobsługiwane słowa kluczowe ...................................................................... 328
Układ klasy ....................................................................................................... 331
Wyra enia warunkowe ...................................................................................... 334
for ...................................................................................................................... 338
Zapis zmiennych ............................................................................................... 341
Definicje typu dla wskaźników ......................................................................... 347
Co wchodzi w skład definicji? .......................................................................... 349
Nowe nazwy ...................................................................................................... 354
Prawdziwe definicje typu .................................................................................. 356
Dobre, złe i brzydkie ......................................................................................... 361
Rozdział 14. Tablice i wskaźniki ....................................................................... 263
Rozdział 15. Wartości ...................................................................................... 285
Rozdział 16. Słowa kluczowe ............................................................................ 311
Rozdział 17. Składnia ....................................................................................... 331
Rozdział 18. Definicja typów za pomocą typedef ................................................ 345
Część IV Świadome konwersje ...................................................369
Rozdział 19. Rzutowanie ................................................................................... 371
19.1.
19.2.
19.3.
19.4.
19.5.
19.6.
19.7.
Niejawna konwersja .......................................................................................... 371
Rzutowanie w C++ ............................................................................................ 372
Przypadek rzutowania w stylu C ....................................................................... 373
Rzutowanie na sterydach ................................................................................... 375
explicit_cast ...................................................................................................... 377
literal_cast ......................................................................................................... 382
union_cast ......................................................................................................... 385
8
Język C++. Gotowe rozwiązania dla programistów
19.8. comstl::interface_cast ........................................................................................ 388
19.9. boost::polymorphic_cast ................................................................................... 399
19.10. Rzutowanie — podsumowanie .......................................................................... 401
Rozdział 20. Podkładki ..................................................................................... 403
20.1.
20.2.
20.3.
20.4.
20.5.
20.6.
20.7.
20.8.
20.9.
20.10.
20.11.
21.1.
21.2.
21.3.
21.4.
22.1.
22.2.
22.3.
22.4.
22.5.
22.6.
22.7.
23.1.
23.2.
23.3.
23.4.
23.5.
23.6.
Ogarnąć zmiany i zwiększyć elastyczność ........................................................ 404
Podkładki atrybutów ......................................................................................... 406
Podkładki logiczne ............................................................................................ 408
Podkładki sterujące ........................................................................................... 409
Podkładki konwertujące ..................................................................................... 411
Podkładki zło one ............................................................................................. 414
Przestrzenie nazw a sprawdzenie Koeniga ........................................................ 420
Dlaczego nie typy cechujące? ........................................................................... 423
Dopasowanie strukturalne ................................................................................. 424
Przełamywanie monolitu ................................................................................... 426
Podkładki — podsumowanie ............................................................................. 428
Lekkie RAII ...................................................................................................... 430
Wiązanie danych z operacjami .......................................................................... 431
Przypomnienie zało eń ..................................................................................... 438
Forniry — podsumowanie ................................................................................. 440
Dodawanie nowej funkcjonalności .................................................................... 442
Wybór skóry ...................................................................................................... 442
Przesłanianie metod niewirtualnych .................................................................. 443
Wykorzystywanie zasięgu ................................................................................. 445
Symulowany polimorfizm czasu kompilacji — sworznie wsteczne .................. 447
Parametryzowalne pakowanie polimorficzne .................................................... 449
Sworznie — podsumowanie .............................................................................. 451
Ukryte koszty .................................................................................................... 455
Wiszące referencje ............................................................................................ 455
Specjalizacja konstruktorów szablonów ............................................................ 457
Pośrednictwo argumentów ................................................................................ 458
Ukierunkowywanie na konkretne rodzaje argumentów .................................... 460
Konstruktory szablonów — podsumowanie ...................................................... 461
Rozdział 21. Forniry .......................................................................................... 429
Rozdział 22. Sworznie ...................................................................................... 441
Rozdział 23. Konstruktory szablonów ................................................................ 453
Część V
Operatory ....................................................................463
24.1.
24.2.
24.3.
24.4.
24.5.
24.6.
24.7.
24.8.
operator int() const ............................................................................................ 465
operator void *() const ...................................................................................... 466
operator bool() const ......................................................................................... 467
operator !() — not! ............................................................................................ 468
operator boolean const *() const ........................................................................ 468
operator int boolean::*() const .......................................................................... 469
Stosowanie operatorów w praktyce ................................................................... 469
operator! ............................................................................................................ 473
Rozdział 24. operator bool() ............................................................................. 465
Rozdział 25. Szybkie i nieinwazyjne łączenie ciągów znaków ............................. 475
25.1. fast_string_concatenator<> ............................................................................... 476
25.2. Wydajność ......................................................................................................... 484
25.3. Praca z innymi klasami obsługującymi ciągi znaków ....................................... 487
Zgłoś jeśli naruszono regulamin