C++. Kruczki i fortele w programowaniu.pdf

(1032 KB) Pobierz
C:\Andrzej\PDF\ABC nagrywania p³yt CD\1 strona.cdr
IDZ DO
PRZYK£ADOW Y ROZDZIA£
C++. Kruczki i fortele
SPIS TRECI
w programowaniu
Autor: Stephen C. Dewhurst
T³umaczenie: Tomasz ¯mijewski
ISBN: 83-7361-346-3
Tytu³ orygina³u : C++ Gotchas: Avoiding
Format: B5, stron: 266
KATALOG KSI¥¯EK
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
DODAJ DO KOSZYKA
„C++. Kruczki i fortele w programowaniu” to pomoc dla zawodowych programistów
pozwalaj¹ca unikn¹æ lub poprawiæ dziewiêædziesi¹t dziewiêæ najczêciej pope³nianych
i najbardziej szkodliwych b³êdów projektowych i programowych w C++. Jest to te¿
ksi¹¿ka, dziêki której mo¿na poznaæ niektóre niestandardowe cechy jêzyka C++
i techniki programistyczne.
W ksi¹¿ce omówiono typowe b³êdy wystêpuj¹ce niemal¿e we wszystkich programach
utworzonych w C++. Ka¿dy z nich zosta³ starannie opisany, przedstawiono równie¿
konsekwencje wynikaj¹ce z ich pojawienia siê w kodzie programu i szczegó³owy opis
sposobów na ich unikniêcie. „C++. Kruczki i fortele w programowaniu” to ksi¹¿ka
o tym, jak unikn¹æ najwiêkszych zagro¿eñ zwi¹zanych z programowaniem w C++.
Gotowa i praktyczna wiedza dla programistów, która pozwoli im uzyskaæ status
ekspertów.
Omówione b³êdy dotycz¹:
• Podstaw jêzyka C++
• Sk³adni jêzyka
• Preprocesora
• Konwersji
• Inicjalizacji
• Zarz¹dzania pamiêci¹ i zasobami
• Polimorfizmu
• Projektowania klas
• Projektowania hierarchii
Stephen C. Dewhurst by³ jednym z pierwszych u¿ytkowników C++ w Bell Labs.
Ma ponad osiemnacie lat dowiadczenia w stosowaniu jêzyka C++ do takich
zagadnieñ, jak projektowanie kompilatorów, zabezpieczenia, handel elektroniczny oraz
elementy telekomunikacji wbudowane w wiêksze systemy. Jest wspó³autorem wydanej
przez Prentice Hall w 1989 roku ksi¹¿ki „Programming in C++”, redaktorem „C/C++
Users Journal”, poza tym prowadzi³ kolumnê w „C++ Report”. Jest autorem dwóch
kompilatorów C++, napisa³ wiele artyku³ów o budowie kompilatorów i technikach
programowania w C++.
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
91690392.001.png 91690392.002.png 91690392.003.png
Spis treci
Wstp.................................................................................................... 9
Podstawy ............................................................................................. 13
Zagadnienie 1: nadmiar komentarzy.................................................................................13
Zagadnienie 2: magiczne liczby........................................................................................16
Zagadnienie 3: zmienne globalne......................................................................................17
Zagadnienie 4: nierozrónianie przecienia od inicjalizacji domy lnej..........................19
Zagadnienie 5: niezrozumienie referencji.........................................................................21
Zagadnienie 6: niezrozumienie deklaracji const ...............................................................24
Zagadnienie 7: nieznajomo & podstaw j(zyka ..................................................................25
Zagadnienie 8: nierozrónianie dost(pno ci i widoczno ci ..............................................29
Zagadnienie 9: bł(dy j(zykowe.........................................................................................32
Zagadnienie 10: nieznajomo & idiomów...........................................................................34
Zagadnienie 11: zb(dna błyskotliwo & .............................................................................37
Zagadnienie 12: dorosłe zachowania ................................................................................39
Składnia............................................................................................... 41
Zagadnienie 13: pomylenie inicjalizacji z uyciem tablicy ..............................................41
Zagadnienie 14: nieokre lona kolejno & warto ciowania .................................................42
Zagadnienie 15: problemy z priorytetami .........................................................................47
Zagadnienie 16: przebojowa instrukcja for.......................................................................49
Zagadnienie 17: problemy najwi(kszego k(sa..................................................................52
Zagadnienie 18: zmiana kolejno ci elementów deklaracji................................................53
Zagadnienie 19: nierozrónianie funkcji i obiektu............................................................55
Zagadnienie 20: migracja kwalifikatorów typu ................................................................55
Zagadnienie 21: samoinicjalizacja ....................................................................................56
Zagadnienie 22: typy static i extern ..................................................................................58
Zagadnienie 23: anomalia szukania funkcji operatora......................................................58
Zagadnienie 24: specyfika operatora ->............................................................................60
Preprocesor.......................................................................................... 63
Zagadnienie 25: literały w #define....................................................................................63
Zagadnienie 26: pseudofunkcje w #define........................................................................65
Zagadnienie 27: naduywanie #if .....................................................................................68
Zagadnienie 28: efekty uboczne w asercjach....................................................................72
6
C++. Kruczki i fortele w programowaniu
Konwersje ............................................................................................ 75
Zagadnienie 29: konwersja przez void *...........................................................................75
Zagadnienie 30: szatkowanie ............................................................................................78
Zagadnienie 31: niezrozumienie konwersji wska3nika na stał........................................80
Zagadnienie 32: niezrozumienie konwersji wska3nika na wska3nik na stał...................80
Zagadnienie 33: niezrozumienie konwersji wska3ników wska3ników klas bazowych....84
Zagadnienie 34: problemy ze wska3nikami tablic wielowymiarowych ...........................84
Zagadnienie 35: niesprawdzone rzutowanie w dół ...........................................................86
Zagadnienie 36: nieprawidłowe uycie operatorów konwersji.........................................87
Zagadnienie 37: niezamierzona konwersja konstruktora..................................................90
Zagadnienie 38: rzutowanie w przypadku wielokrotnego dziedziczenia..........................93
Zagadnienie 39: rzutowanie niepełnych typów.................................................................94
Zagadnienie 40: rzutowanie w starym stylu......................................................................96
Zagadnienie 41: rzutowanie statyczne ..............................................................................97
Zagadnienie 42: inicjalizacja parametrów formalnych tymczasowymi warto ciami .......99
Zagadnienie 43: czas ycia warto ci tymczasowych ......................................................102
Zagadnienie 44: referencje i obiekty tymczasowe ..........................................................104
Zagadnienie 45: niejednoznaczno & dynamic_cast.........................................................107
Zagadnienie 46: niezrozumienie przeciwwariancji.........................................................110
Inicjalizacja........................................................................................ 115
Zagadnienie 47: mylenie przypisania i inicjalizacji........................................................115
Zagadnienie 48: nieprawidłowy zasi(g zmiennych ........................................................118
Zagadnienie 49: niedocenianie operacji kopiowania w C++ ..........................................120
Zagadnienie 50: bitowe kopiowanie obiektów................................................................124
Zagadnienie 51: mylca inicjalizacja i przypisania w konstruktorach............................126
Zagadnienie 52: zmienna kolejno & pól na li cie inicjalizacji ........................................128
Zagadnienie 53: inicjalizacja domy lna bazowej klasy wirtualnej .................................129
Zagadnienie 54: inicjalizacja klasy bazowej konstruktora kopiujcego .........................133
Zagadnienie 55: kolejno & inicjalizacji danych statycznych w programie .....................135
Zagadnienie 56: inicjalizacja bezpo rednia a kopiowanie ..............................................137
Zagadnienie 57: bezpo rednia inicjalizacja parametrów ................................................140
Zagadnienie 58: nieznajomo & optymalizacji warto ci zwracanych...............................142
Zagadnienie 59: inicjalizacja pola statycznego w konstruktorze....................................145
Zarz"dzanie pamici" i zasobami ........................................................ 149
Zagadnienie 60: nieodrónianie alokacji danej typu nietablicowego i tablicy ...............149
Zagadnienie 61: sprawdzanie alokacji pami(ci...............................................................152
Zagadnienie 62: zastpienie globalnych new i delete .....................................................154
Zagadnienie 63: mylenie zakresu i wywołanie metod new i delete................................157
Zagadnienie 64: wyrzucanie literałów ła7cuchowych ....................................................158
Zagadnienie 65: nieprawidłowe korzystanie z mechanizmu wyjtków..........................160
Zagadnienie 66: naduywanie adresów lokalnych..........................................................163
Zagadnienie 67: błd pozyskania zasobu bierze si( z inicjalizacji .................................167
Zagadnienie 68: nieprawidłowe uycie auto_ptr ............................................................171
Polimorfizm ........................................................................................ 175
Zagadnienie 69: kody typów...........................................................................................175
Zagadnienie 70: niewirtualny destruktor klasy bazowej.................................................179
Zagadnienie 71: ukrywanie funkcji niewirtualnych........................................................183
Zagadnienie 72: zbyt elastyczne korzystanie z wzorca Template Method .....................186
Zagadnienie 73: przecianie funkcji wirtualnych..........................................................187
Zagadnienie 74: funkcje wirtualne z inicjalizacj parametrów domy lnych ..................188
Zagadnienie 75: funkcje wirtualne w konstruktorach i destruktorach ............................190
Spis treci
7
Zagadnienie 76: przypisanie wirtualne ...........................................................................192
Zagadnienie 77: nierozrónianie przeciania, nadpisywania i ukrywania ....................195
Zagadnienie 78: funkcje wirtualne i nadpisywanie.........................................................199
Zagadnienie 79: dominacja .............................................................................................204
Projekt klas ....................................................................................... 207
Zagadnienie 80: interfejsy get/set ...................................................................................207
Zagadnienie 81: pola stałe i referencje............................................................................210
Zagadnienie 82: niezrozumienie metod const.................................................................212
Zagadnienie 83: nierozrónianie agregacji i przypadków uycia ...................................216
Zagadnienie 84: nieprawidłowe przecianie operatorów..............................................220
Zagadnienie 85: priorytety a przecianie ......................................................................223
Zagadnienie 86: metody przyjacielskie a operatory........................................................224
Zagadnienie 87: problemy z inkrementacj i dekrementacj..........................................225
Zagadnienie 88: niezrozumienie operacji kopiowania z szablonów...............................228
Projekt hierarchii................................................................................ 231
Zagadnienie 89: tablice obiektów ...................................................................................... 231
Zagadnienie 90: nieprawidłowe uywanie kontenerów .................................................... 233
Zagadnienie 91: niezrozumienie dost(pu chronionego ..................................................... 236
Zagadnienie 92: dziedziczenie publiczne metod wielokrotnego wykorzystania kodu ... 239
Zagadnienie 93: konkretne publiczne klasy bazowe ......................................................... 243
Zagadnienie 94: uycie zdegenerowanych hierarchii........................................................ 243
Zagadnienie 95: naduywanie dziedziczenia..................................................................... 244
Zagadnienie 96: struktury kontrolne działajce na podstawie typów ............................... 248
Zagadnienie 97: kosmiczne hierarchie............................................................................... 250
Zagadnienie 98: zadawanie obiektowi niedyskretnych pyta7........................................... 253
Zagadnienie 99: zapytania o moliwo ci........................................................................... 255
Bibliografia......................................................................................... 259
Skorowidz.......................................................................................... 261
Zarzdzanie pamici
i zasobami
C++ cechuje si ogromn elastycznoci w zarzdzaniu pamici ale niewielu progra-
mistów C++ w pełni rozumie dostpne mechanizmy. W tym obszarze jzyka przeci-
"anie, ukrywanie nazw, konstruktory, destruktory, wyjtki, funkcje statyczne wirtualne,
funkcje operatory i funkcje zwykłe — wszystkie razem zapewniaj niezwykł elastycz-
no& i mo"liwo& sterowania zarzdzaniem pamici. Niestety, wszystko si tu nieco
komplikuje, co jest chyba zreszt nieuniknione.
W tym rozdziale przyjrzymy si ró"nym cechom jzyka C++ zwizanym z zarzdza-
niem pamici, poka"emy, jak czasem cechy te przedziwnie si splataj i jak mo"na
ich wzajemne interakcje uproci&.
Jako "e pami& jest jednym z wielu zasobów wykorzystywanych przez program, warto
si dowiedzie&, w jaki sposób mo"na j wiza& z innymi zasobami i jak mo"na zarz-
dza& ni i innymi zasobami.
Zagadnienie 60:
nieodrónianie alokacji danej
typu nietablicowego i tablicy
Czy obiekt jest tym samym, co tablica obiektów ? Oczywicie, "e nie.
Dlatego zatem tak wielu programistów C++ ze zdziwieniem stwierdza, "e inne ope-
ratory słu" do alokacji i zwalniania tablic, a inne do typów nietablicowych?
Wiadomo, jak zaalokowa& i zwolni& pojedynczy obiekt — nale"y u"y& operato-
rów i :
 
Zgłoś jeśli naruszono regulamin