[ Pobierz całość w formacie PDF ]
IDZ DO
PRZYK£ADOW
C++. Kanony wiedzy
SPIS TREŒCI
programistycznej
KATALOG KSI¥¯EK
Autor: Stephen C. Dewhurst
T³umaczenie: Przemys³aw Szeremiota
ISBN: 83-246-0024-8
Tytu³ orygina³
Format: B5, stron: 248
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
Wiadomoœci niezbêdne ka¿demu programiœcie
Zasady programowania obiektowego
Stosowanie wzorców projektowych
Korzystanie z mechanizmu szablonów
C++ jest jednym z najpopularniejszych jêzyków programowania. Jego potê¿ne
mo¿liwoœci id¹ w parze ze z³o¿onoœci¹, która powoduje, ¿e nauka programowania
w C++ nie jest ³atwym zadaniem. Programista, który chce opanowaæ zasady tworzenia
aplikacji w C++, musi w pe³ni opanowaæ przynajmniej czêœæ zwi¹zanych z tym jêzykiem
pojêæ i technik. Napisanie prawid³owo i wydajnie dzia³aj¹cego programu wymaga
wykorzystania tej wiedzy w praktyce.
„C++. Kanony wiedzy programistycznej” to przegl¹d zagadnieñ, których znajomoœæ
jest nieodzowna dla ka¿dego programisty korzystaj¹cego z C++. Czytaj¹c tê ksi¹¿kê,
poznasz regu³y projektowania i programowania obiektowego, sposoby wykorzystywania
funkcji i szablonów oraz zasady stosowania wzorów projektowych. Przeczytasz
o dyrektywach kompilatora, wskaŸnikach i rzutowaniu. Dowiesz siê wszystkiego,
co jest uwa¿ane za sedno jêzyka C++.
Projektowanie obiektowe
Polimorfizm
Wykorzystywanie podstawowych wzorców projektowych
Deklarowanie funkcji i tablic
Zarz¹dzanie pamiêci¹
Sterowanie przebiegiem kompilacji
Korzystanie z szablonów
Obs³uga b³êdów za pomoc¹ wyj¹tków
Ta ksi¹¿ka pozwoli Ci siê staæ programist¹ doskona³ym
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
ONOWOŒCIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
O autorze:
Stephen C. Dewhurst by³ jednym z pierwszych u¿ytkowników jêzyka C++
w laboratoriach Bell Labs. Ma ponad dwudziestoletnie doœwiadczenie w stosowaniu
C++ do rozwi¹zywania problemów w takich dziedzinach, jak projektowanie kompilatorów,
zabezpieczanie handlu elektronicznego czy telekomunikacja implementowana na bazie
urz¹dzeñ wbudowanych. Jest autorem ksi¹¿ki C++ Gotchas (Addison-Wesley, 2003)
i wspó³autorem ksi¹¿ki Programming in C++, Second Edition (Prentice Hall, 1995).
Dewhurst jest cz³onkiem grupy doradczej przy The C++ Source i wspó³redaktorem
magazynu C/C++ Users Journal; wczeœniej prowadzi³ swoj¹ kolumnê w C++ Report.
Jest równie¿ twórc¹ dwóch kompilatorów jêzyka C++ i wielu artyku³ów traktuj¹cych
o projektowaniu kompilatorów i technikach programowania w C++.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
Podziękowania ........................................................................... 7
Wstęp ....................................................................................... 9
Konwencje typograficzne .......................................................... 15
Zagadnienie 1. Abstrakcje ............................................................................... 17
Zagadnienie 2. Polimorfizm .............................................................................. 19
Zagadnienie 3. Wzorce projektowe .................................................................. 23
Zagadnienie 4. Standardowa biblioteka szablonów ........................................... 27
Zagadnienie 5. Referencje są aliasami, nie wskaźnikami .................................. 29
Zagadnienie 6. Parametry tablicowe ................................................................ 33
Zagadnienie 7. Wskaźniki const i wskaźniki na const ....................................... 37
Zagadnienie 8. Wskaźniki na wskaźniki ........................................................... 41
Zagadnienie 9. Nowe operatory rzutowania ...................................................... 43
Zagadnienie 10. Semantyka metod deklarowanych z const ................................. 47
Zagadnienie 11. Kompilator nadziewa klasy farszem ........................................... 51
Zagadnienie 12. Przypisanie to nie to samo co inicjalizacja ................................ 55
Zagadnienie 13. Operacje kopiowania ................................................................ 59
Zagadnienie 14. Wskaźniki funkcji ..................................................................... 63
Zagadnienie 15. Wskaźniki składowych klas nie są wskaźnikami ........................ 67
Zagadnienie 16. Wskaźniki metod nie są wskaźnikami ....................................... 71
Zagadnienie 17. Deklaratory funkcji i tablic ....................................................... 75
Zagadnienie 18. Obiekty funkcyjne .................................................................... 77
Zagadnienie 19. Wzorzec Command i dewiza hollywoodzka ................................. 81
Zagadnienie 20. Obiekty funkcyjne STL .............................................................. 85
4
Spis treści
Zagadnienie 21. Przeciążanie to nie to samo co przesłanianie ............................ 89
Zagadnienie 22. Wzorzec Template Method ......................................................... 91
Zagadnienie 23. Przestrzenie nazw .................................................................... 93
Zagadnienie 24. Wyszukiwanie metod ................................................................ 97
Zagadnienie 25. Wyszukiwanie ADL ................................................................... 99
Zagadnienie 26. Wyszukiwanie funkcji operatorów ........................................... 101
Zagadnienie 27. Odpytywanie klasy ................................................................. 103
Zagadnienie 28. Semantyka porównywania wskaźników ................................... 107
Zagadnienie 29. Konstruktory wirtualne i wzorzec Prototype ............................ 109
Zagadnienie 30. Wzorzec Factory Method ........................................................ 113
Zagadnienie 31. Kowariancja typów zwracanych .............................................. 117
Zagadnienie 32. Blokowanie kopiowania .......................................................... 121
Zagadnienie 33. Wytwarzanie abstrakcyjnych klas bazowych ............................ 123
Zagadnienie 34. Blokowanie przydziału na stercie ............................................ 125
Zagadnienie 35. Miejscowa wersja new ........................................................... 127
Zagadnienie 36. Zarządzanie pamięcią w klasie ............................................... 131
Zagadnienie 37. Przydział tablicowy ................................................................. 135
Zagadnienie 38. Aksjomaty odporności na wyjątki ........................................... 139
Zagadnienie 39. Funkcje odporne na wyjątki .................................................... 143
Zagadnienie 40. Reguła RAII ........................................................................... 147
Zagadnienie 41. Operator new, konstruktory i wyjątki ...................................... 151
Zagadnienie 42. Inteligentne wskaźniki ........................................................... 153
Zagadnienie 43. Niezwykłości auto_ptr ............................................................ 155
Zagadnienie 44. Arytmetyka wskaźników ......................................................... 157
Zagadnienie 45. Terminologia szablonów ......................................................... 161
Zagadnienie 46. Jawna specjalizacja szablonu klasy ......................................... 163
Zagadnienie 47. Częściowa specjalizacja szablonu ........................................... 167
Zagadnienie 48. Specjalizacja metody szablonu klasy ....................................... 171
Zagadnienie 49. Niepewność co do nazw typów ............................................... 175
Zagadnienie 50. Szablony składowych ............................................................. 179
Zagadnienie 51. Niepewność co do nazw szablonów ......................................... 183
Zagadnienie 52. Specjalizacja dla informacji o typie ......................................... 185
Spis treści
5
Zagadnienie 53. Osadzanie informacji o typie ................................................... 189
Zagadnienie 54. Klasy cech ............................................................................. 193
Zagadnienie 55. Szablony parametrów szablonu ............................................... 199
Zagadnienie 56. Klasy wytycznych ................................................................... 205
Zagadnienie 57. Dedukcja argumentów szablonu .............................................. 209
Zagadnienie 58. Przeciążanie szablonów funkcji ............................................... 213
Zagadnienie 59. Reguła SFINAE ...................................................................... 217
Zagadnienie 60. Algorytmy uogólnione ............................................................. 221
Zagadnienie 61. Konkretyzuje się tylko to, co używane .................................... 225
Zagadnienie 62. Bariery #include ..................................................................... 229
Zagadnienie 63. Opcjonalne słowa kluczowe .................................................... 231
Bibliografia ............................................................................ 235
Skorowidz .............................................................................. 237
Zagadnienie 7.
Wskaźniki const
i wskaźniki na const
W swobodnych konwersacjach programiści C++ często mówiąc „wskaźnik
const
”
mają tak naprawdę na myśli „wskaźnik na
const
”. Szkoda, bo to dwa różne pojęcia.
T *pt = new T; //
wskaźnik na T
const T *pct = pt; //
wskaźnik na const T
T *const cpt = pt; //
wskaźnik const na T
Zanim zaczniemy gorączkowo tasować
const
w deklaracjach wskaźników, powinni-
śmy najpierw zdecydować, o co nam chodzi. Co ma być stałe: wskaźnik, obiekt
wskazywany, czy może oba? W deklaracji
pct
wskaźnik nie jest stały, stały (niemo-
dyfikowalny) ma być za to obiekt przezeń wskazywany; kwalifikator
const
modyfikuje
typ bazowy
T
, a nie modyfikator wskaźnika
*
. W przypadku
cpt
deklarowany jest
niemodyfikowalny (stały) wskaźnik obiektu modyfikowalnego; kwalifikator
const
modyfikuje tu modyfikator wskaźnika
*
, zostawiając w spokoju typ bazowy
T
.
Aby jeszcze zaciemnić składnię wskaźników i kwalifikatora
const
, można powiedzieć,
że kolejność specyfikatorów deklaracji, czyli kolejność tego, co występuje w deklara-
cji wskaźnika przed pierwszym modyfikatorem
*
, jest nieistotna. Na przykład, obie
poniższe deklaracje wprowadzają do programu zmienne dokładnie tego samego typu:
const T *p1; //
wskaźnik na const T
T const *p2; //
również wskaźnik na const T
Pierwsza postać jest bardziej klasyczna, ale wielu ekspertów C++ zaleca teraz stoso-
wanie postaci drugiej. W uzasadnieniu podnoszą, że owa postać zmniejsza ryzyko
nieporozumień, bo można sobie pomóc odczytaniem deklaracji od tyłu: „wskaźnik na
const T
”. Wybór jednej z powyższych form jest dowolny, ważne, aby trzymać się raz
przyjętej konwencji. Słowem, należy uważać na częsty błąd mylenia deklaracji wskaź-
nika stałego z deklaracją wskaźnika na obiekt stały (niemodyfikowalny).
T const * p3; //
wskaźnik na obiekt stały
T *const p4 = pt; //
stały wskaźnik na obiekt modyfikowalny
[ Pobierz całość w formacie PDF ]