C++ wyjątkowo dobrze nadaje się do nauki jako 'pierwszy poważny język programowania', a równocześnie jest znakomitym, wszechstronnym narzędziem do tworzenia nowoczesnych aplikacji. Programowanie w nim wymaga nieco wysiłku, ale pozwala zarówno szybko przyswoić najważniejsze paradygmaty informatyki, jak i wdrożyć się w pisanie kodu zgodne z dobrymi praktykami. Przy tym C++ ma cechy nowoczesnego języka programowania, a jego możliwości są poszerzane dzięki bibliotekom. Aby adept sztuki programowania mógł skorzystać z tych wszystkich zalet, potrzebuje pomocy dobrego nauczyciela lub dobrego podręcznika. Tylko w ten sposób uniknie typowych błędów popełnianych na skutek niewystarczającego zrozumienia podstaw programowania i najważniejszych koncepcji programistycznych.
Oto polska edycja popularnego podręcznika opartego na naukowych podstawach skutecznego uczenia. To znakomite wprowadzenie do podstawowych technik programowania i umiejętności projektowania pozwala łatwo, a przy tym dogłębnie opanować elementarne pojęcia. W przystępny sposób omawia najistotniejsze kwestie działania algorytmów i rodzaje struktur danych. Krok po kroku przeprowadza czytelnika od podstaw do bardziej zaawansowanych tematów związanych ze współczesnymi aplikacjami, takich jak GUI i programowanie XML. Poszczególne koncepcje zostały tu wyjaśnione z wykorzystaniem trafnie dobranych schematów i grafik. Nie zabrakło też wskazówek, przykładów i obszernych fragmentów świetnie napisanego kodu, które ułatwiają naukę, podobnie jak liczne ćwiczenia i studia przypadków.
W tej książce między innymi:
podstawowe koncepcje programowania: struktury sterujące, tablice, wskaźniki
programowanie obiektowe, dziedziczenie, polimorfizm
struktury danych: liniowe i oparte na drzewach
wprowadzenie do algorytmów
szablony i zarządzanie pamięcią
Bądź profesjonalistą od pierwszej linii kodu!
Znajdź podobne książki
Ostatnio czytane w tej kategorii
Darmowy fragment publikacji:
Tytuł oryginału: Big C++: Late Objects, 3rd Edition
Tłumaczenie: Krzysztof Bąbol
ISBN: 978-83-283-6728-9
Copyright © 2018, 2012, 2009 John Wiley Sons, Inc. All rights reserved.
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form
or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise without
either the prior written permission of the Publisher.
Translation copyright © 2021 by Helion SA
All rights reserved. This translation published under license with the original publisher
John Wiley Sons, Inc.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Autor oraz Helion SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne
i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym
ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Helion SA nie ponoszą również
żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych
w książce.
Helion SA
ul. Kościuszki 1c, 44-100 Gliwice
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/wpcpp3
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/wpcpp3.zip
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis treści
ELEMENTY KSIĄŻKI ..................................................................................................... 16
PRZEDMOWA ............................................................................................................ 23
IAS
IAS
CPB
WDP
1. WPROWADZENIE ....................................................................................35
1.1. Czym jest programowanie? ......................................................................... 35
1.2. Anatomia komputera ................................................................................. 36
Komputery są wszędzie ..............................................................................38
1.3. Kod maszynowy i języki programowania .................................................... 39
Organizacje normalizacyjne .......................................................................40
1.4. Zapoznanie się ze środowiskiem programowania ........................................ 41
Kopie zapasowe .........................................................................................44
1.5. Analiza pierwszego programu ..................................................................... 45
Pomijanie średników .................................................................................47
Sekwencje ucieczki ....................................................................................48
1.6. Błędy ......................................................................................................... 49
Błędna pisownia wyrazów ..........................................................................50
1.7. Rozwiązywanie problemów: projektowanie algorytmów ............................. 50
Koncepcja algorytmu .................................................................................51
1.7.1.
Algorytm rozwiązywania problemu stopy zwrotu .......................................51
1.7.2.
1.7.3.
Pseudokod .................................................................................................52
1.7.4. Od algorytmów do programów ..................................................................53
JTZ
Opisywanie algorytmu za pomocą pseudokodu .........................................54
P
Napisanie algorytmu układania płytek podłogowych ..................................55
Podsumowanie rozdziału ...................................................................................... 57
CPB
TS
Kup książkęPoleć książkę4
Spis treści
2. PODSTAWOWE TYPY DANYCH ..............................................................59
2.1. Zmienne .................................................................................................... 59
2.1.1. Definicje zmiennych ..................................................................................60
2.1.2.
Typy liczbowe ............................................................................................61
2.1.3. Nazwy zmiennych .....................................................................................62
Instrukcja przypisania .................................................................................63
2.1.4.
2.1.5.
Stałe ..........................................................................................................65
Komentarze ...............................................................................................65
2.1.6.
CPB
Używanie niezdefiniowanych zmiennych ...................................................66
CPB
Używanie niezainicjowanych zmiennych ...................................................66
WDP Wybieraj opisowe nazwy zmiennych .........................................................67
WDP
Nie używaj sekretnych numerów ...............................................................67
TS
Typy liczbowe w C++ ..............................................................................68
TS
Zakresy i precyzja liczb ..............................................................................69
TS
Definiowanie zmiennych ze słowem auto ..................................................69
2.2. Arytmetyka ................................................................................................ 69
2.2.1. Operatory arytmetyczne ............................................................................69
2.2.2.
Inkrementacja i dekrementacja ..................................................................70
2.2.3. Dzielenie całkowite i reszta z dzielenia ......................................................70
Konwertowanie liczb zmiennoprzecinkowych na całkowite .......................71
2.2.4.
Potęgi i pierwiastki .....................................................................................72
2.2.5.
CPB
Niezamierzone dzielenie całkowite ............................................................74
CPB
Niezamknięte nawiasy ...............................................................................74
CPB
Zapominanie o plikach nagłówkowych ......................................................75
CPB
Błędy zaokrąglenia .....................................................................................76
WDP
Spacje w wyrażeniach ................................................................................76
TS
Rzutowania ................................................................................................77
TS
Połączenie przypisania i działań arytmetycznych ........................................77
IAS
Błąd jednostki zmiennoprzecinkowej procesora Pentium ...........................77
2.3. Wejście i wyjście ........................................................................................ 79
2.3.1. Wejście ......................................................................................................79
2.3.2.
Formatowanie wyjścia ................................................................................80
2.4. Rozwiązywanie problemów: najpierw zrób to ręcznie ................................ 82
Obliczanie czasu podróży ..........................................................................83
Przeprowadzanie obliczeń .........................................................................83
Obliczenie kosztu znaczków pocztowych ..................................................86
2.5. Ciągi .......................................................................................................... 86
Typ string ...................................................................................................86
2.5.1.
2.5.2.
Łączenie ciągów ........................................................................................87
2.5.3. Wprowadzanie ciągów ..............................................................................87
2.5.4.
Funkcje ciągów ..........................................................................................88
IAS
Alfabety międzynarodowe i zestaw Unicode ..............................................91
Podsumowanie rozdziału ...................................................................................... 92
P
JTZ
P
Kup książkęPoleć książkę
Spis treści
5
3.1.
CPB
CPB
WDP
TS
JTZ
P
IAS
3. DECYZJE ...................................................................................................93
Instrukcja if ................................................................................................ 93
CPB
Średnik po warunku if ................................................................................96
WDP
Układ nawiasów klamrowych .....................................................................96
WDP
Zawsze używaj nawiasów klamrowych .......................................................97
WDP Wcięcia .....................................................................................................97
WDP
Unikaj duplikowania kodu w gałęziach ......................................................98
TS
Operator warunkowy .................................................................................99
3.2. Porównywanie liczb oraz znaków ............................................................... 99
Mylenie operatora = z == ......................................................................101
Dokładne porównywanie liczb zmiennoprzecinkowych ...........................102
Doprowadź do kompilacji z brakiem ostrzeżeń ........................................103
Alfabetyczna kolejność ciągów .................................................................103
Implementacja instrukcji if .......................................................................104
Wyodrębnianie ze środka ........................................................................106
Dysfunkcjonalne systemy komputerowe ...................................................106
3.3. Wiele wariantów ...................................................................................... 107
Instrukcja switch ......................................................................................110
3.4. Zagnieżdżone gałęzie ............................................................................... 111
Problem z zawieszonym słowem else .......................................................113
Ręczne śledzenie kodu ............................................................................114
3.5. Rozwiązywanie problemów: schematy blokowe ....................................... 116
3.6. Rozwiązywanie problemów: przypadki testowe ........................................ 119
Opracuj harmonogram i zarezerwuj czas na nieoczekiwane problemy .....120
3.7. Zmienne i operatory logiczne ................................................................... 121
Łączenie wielu operatorów relacyjnych ....................................................124
Mylenie warunków i || .....................................................................125
Skrócone obliczanie wartości operatorów logicznych ...............................126
Prawa de Morgana ...................................................................................126
3.8. Zastosowanie: weryfikacja danych wejściowych ....................................... 127
Sztuczna inteligencja ................................................................................129
Podsumowanie rozdziału .................................................................................... 131
CPB
WDP
TS
WDP
CPB
CPB
TS
TS
IAS
4. PĘTLE ......................................................................................................133
4.1. Pętla while ............................................................................................... 133
Nieskończone pętle .................................................................................138
Nie myśl w kategoriach „Czy doszliśmy już do celu?” ...............................138
Pomyłki o jeden .......................................................................................139
Pierwszy „bug” ........................................................................................140
4.2. Rozwiązywanie problemów: ręczne śledzenie kodu ................................. 140
CPB
CPB
CPB
IAS
Kup książkęPoleć książkę6
Spis treści
WDP
4.3. Pętla for ................................................................................................... 143
WDP
Używaj pętli tylko do tego, do czego została przeznaczona ......................147
WDP Wybierz zakres pętli odpowiedni do zadania ...........................................147
WDP
Licz iteracje .............................................................................................148
4.4. Pętla do ................................................................................................... 148
Schematy blokowe pętli ...........................................................................149
4.5. Przetwarzanie danych wejściowych .......................................................... 150
4.5.1. Wartości wartownika ...............................................................................150
4.5.2. Odczytywanie danych wejściowych do chwili niepowodzenia .................151
TS
Czyszczenie stanu błędu ..........................................................................153
TS
„Pętla i pół” oraz instrukcja break ...........................................................154
TS
Przekierowywanie wejścia i wyjścia ..........................................................154
4.6. Rozwiązywanie problemów: scenopis ...................................................... 155
4.7. Typowe algorytmy pętli ............................................................................ 158
Suma i średnia .........................................................................................158
4.7.1.
Zliczanie pasujących elementów ..............................................................158
4.7.2.
4.7.3.
Znajdowanie pierwszego pasującego elementu ........................................159
4.7.4. Monitowanie aż do skutku .......................................................................159
4.7.5. Maksimum i minimum .............................................................................160
Porównywanie sąsiednich wartości ..........................................................160
4.7.6.
JTZ
Tworzenie pętli ........................................................................................161
P
Przetwarzanie numerów kart kredytowych ...............................................165
4.8. Zagnieżdżone pętle .................................................................................. 165
Manipulowanie pikselami obrazu .............................................................168
4.9. Rozwiązywanie problemów: najpierw rozwiąż prostszy problem .............. 169
4.10. Liczby losowe i symulacje ......................................................................... 173
4.10.1. Generowanie liczb losowych ....................................................................174
4.10.2. Symulowanie rzutów kostką .....................................................................175
4.10.3. Metoda Monte Carlo ...............................................................................176
IAS
Piractwo cyfrowe .....................................................................................177
Podsumowanie rozdziału .................................................................................... 178
P
5. FUNKCJE .................................................................................................181
5.1. Funkcje jako czarne skrzynki .................................................................... 181
Implementowanie funkcji ......................................................................... 183
5.2.
WDP
Komentarze funkcji ..................................................................................185
5.3. Przekazywanie parametrów ...................................................................... 185
Nie modyfikuj zmiennych parametrycznych .............................................187
5.4. Wartości zwracane ................................................................................... 187
Brak wartości zwracanej ...........................................................................188
Deklaracje funkcji ....................................................................................189
Implementowanie funkcji ........................................................................190
CPB
TS
JTZ
WDP
Kup książkęPoleć książkę
Spis treści
7
P
P
WDP
WDP
TS
WDP
WDP
WDP
P
Generowanie losowych haseł ...................................................................191
Używanie debugera .................................................................................191
5.5. Funkcje bez wartości zwracanych ............................................................. 192
5.6. Rozwiązywanie problemów: funkcje do ponownego wykorzystania .......... 193
5.7. Rozwiązywanie problemów: uściślanie stopniowe .................................... 195
Pilnuj, by funkcje były krótkie ..................................................................200
Śledzenie funkcji ......................................................................................200
Atrapy ......................................................................................................202
Obliczanie oceny z przedmiotu ...............................................................202
5.8. Zakres zmiennej i zmienne globalne ......................................................... 202
Unikaj zmiennych globalnych ..................................................................204
5.9. Parametry referencyjne ............................................................................ 204
Preferuj wartości zwracane zamiast parametrów referencyjnych ...............208
Stałe referencje ........................................................................................209
5.10. Funkcje rekurencyjne (opcjonalnie) .......................................................... 209
Wnioskowanie rekurencyjne ....................................................................212
Nagłe rozpowszechnienie się komputerów osobistych .............................214
Podsumowanie rozdziału .................................................................................... 215
JTZ
IAS
6. TABLICE I WEKTORY ..............................................................................217
6.1. Tablice ..................................................................................................... 217
6.1.1. Definiowanie tablic ..................................................................................217
6.1.2. Dostęp do elementów tablicy ..................................................................219
Częściowo wypełnione tablice .................................................................221
6.1.3.
CPB
Przekroczenie zakresu .............................................................................222
WDP
Używaj tablic do przechowywania serii związanych ze sobą wartości .......222
IAS
Wirusy komputerowe ..............................................................................222
6.2. Typowe algorytmy tablicowe .................................................................... 224
6.2.1. Wypełnianie wartościami .........................................................................224
Kopiowanie .............................................................................................224
6.2.2.
6.2.3.
Suma i średnia .........................................................................................225
6.2.4. Maksimum i minimum .............................................................................225
Separatory elementów .............................................................................225
6.2.5.
6.2.6.
Zliczanie pasujących elementów ..............................................................226
6.2.7. Wyszukiwanie liniowe .............................................................................226
6.2.8. Usuwanie elementu .................................................................................227
6.2.9. Wstawianie elementu ..............................................................................227
6.2.10. Przestawianie elementów .........................................................................229
6.2.11. Odczyt danych wejściowych ....................................................................230
TS
Sortowanie za pomocą biblioteki C++ ....................................................231
TS
Algorytm sortowania ................................................................................231
TS
Wyszukiwanie binarne .............................................................................233
Kup książkęPoleć książkę8
Spis treści
TS
6.3. Tablice a funkcje ...................................................................................... 234
Stałe parametry tablicowe ........................................................................237
6.4. Rozwiązywanie problemów: dostosowywanie algorytmów ........................ 238
Praca z tablicami ......................................................................................240
Rzut kostką ..............................................................................................243
JTZ
P
6.5. Rozwiązywanie problemów: odkrywanie algorytmów
przez manipulację obiektami fizycznymi .................................................. 244
6.6. Tablice dwuwymiarowe ........................................................................... 246
6.6.1. Definiowanie tablic dwuwymiarowych .....................................................247
6.6.2. Dostęp do elementów .............................................................................248
6.6.3.
Lokalizowanie sąsiadujących elementów ..................................................248
6.6.4. Obliczanie sum wierszy i kolumn .............................................................249
6.6.5. Dwuwymiarowe parametry tablicowe ......................................................250
CPB
Pomijanie rozmiaru kolumny
w dwuwymiarowym parametrze tablicowym ...........................................253
Tabela danych o ludności świata ..............................................................253
6.7. Wektory ................................................................................................... 253
6.7.1. Definiowanie wektorów ...........................................................................254
6.7.2.
Powiększanie i zmniejszanie wektorów ....................................................255
6.7.3. Wektory a funkcje ...................................................................................256
6.7.4.
Algorytmy związane z wektorami .............................................................257
6.7.5. Wektory dwuwymiarowe .........................................................................259
WDP
Stosuj wektory zamiast tablic ....................................................................260
TS
Pętla for oparta na zakresie ......................................................................260
Podsumowanie rozdziału .................................................................................... 261
P
7. WSKAŹNIKI I STRUKTURY .....................................................................263
7.1. Definiowanie i używanie wskaźników ...................................................... 264
7.1.1. Definiowanie wskaźników .......................................................................264
7.1.2. Dostęp do zmiennych poprzez wskaźniki .................................................265
Inicjowanie wskaźników ..........................................................................266
7.1.3.
CPB
Mylenie wskaźników z danymi, na które wskazują ...................................268
WDP
Używaj oddzielnej definicji dla każdej zmiennej wskaźnikowej ................269
TS
Wskaźniki i referencje ..............................................................................269
7.2. Tablice i wskaźniki ................................................................................... 270
Tablice jako wskaźniki .............................................................................270
Arytmetyka wskaźnikowa .........................................................................271
Tablicowe zmienne parametryczne są wskaźnikami .................................272
Przechodzenie po tablicy przy użyciu wskaźnika ......................................273
Zwracanie wskaźnika wskazującego na zmienną lokalną ..........................274
Programuj przejrzyście, a nie sprytnie ......................................................275
Stałe wskaźniki .........................................................................................275
7.2.1.
7.2.2.
7.2.3.
TS
CPB
WDP
TS
Kup książkęPoleć książkęSpis treści
9
CPB
CPB
JTZ
P
IAS
7.3.1.
7.3.2.
7.3.3.
7.3.4.
7.3.5.
TS
7.3. Ciągi w językach C i C++ ........................................................................ 276
Typ char ..................................................................................................276
Ciągi w stylu C .........................................................................................276
Tablice znaków ........................................................................................277
Konwertowanie pomiędzy ciągami w stylu C i C++ ................................278
Ciągi w stylu C++ i operator [] ................................................................278
Praca z ciągami w stylu C .........................................................................279
7.4. Dynamiczna alokacja pamięci .................................................................. 281
Wiszące wskaźniki ...................................................................................283
Wycieki pamięci ......................................................................................284
7.5. Tablice i wektory wskaźników .................................................................. 285
7.6. Rozwiązywanie problemów: rysowanie schematu ..................................... 288
Praca ze wskaźnikami ..............................................................................289
Tworzenie korespondencji masowej ........................................................291
Systemy wbudowane ...............................................................................291
7.7. Struktury .................................................................................................. 292
Typy strukturalne .....................................................................................292
Przypisania struktur i ich porównywanie ..................................................293
Funkcje a struktury ...................................................................................294
Tablice struktur ........................................................................................294
Struktury ze składowymi tablicowymi .......................................................295
Struktury zagnieżdżone ............................................................................295
7.8. Wskaźniki a struktury ............................................................................... 296
7.8.1. Wskaźniki do struktur ..............................................................................296
7.8.2.
Struktury ze składowymi wskaźnikowymi .................................................297
TS
Wskaźniki inteligentne .............................................................................298
Podsumowanie rozdziału .................................................................................... 299
7.7.1.
7.7.2.
7.7.3.
7.7.4.
7.7.5.
7.7.6.
8. STRUMIENIE ...........................................................................................301
8.1. Odczytywanie i zapisywanie plików tekstowych ....................................... 301
8.1.1. Otwieranie strumienia .............................................................................302
8.1.2. Odczyt z pliku .........................................................................................303
Zapis do pliku ..........................................................................................304
8.1.3.
8.1.4.
Przykład przetwarzania pliku ...................................................................304
8.2. Odczyt tekstowych danych wejściowych ................................................... 307
8.2.1. Odczyt wyrazów ......................................................................................307
8.2.2. Odczyt znaków ........................................................................................307
8.2.3. Odczyt wierszy ........................................................................................309
CPB
Łączenie operacji wejścia przy użyciu operatora i funkcji getline .......310
TS
Sprawdzanie błędu strumienia .................................................................311
8.3. Zapisywanie tekstowych danych wyjściowych ........................................... 312
Standard Unicode, kodowanie UTF-8 i ciągi C++ ...................................314
TS
Kup książkęPoleć książkę10
Spis treści
IAS
JTZ
P
8.4. Analizowanie i formatowanie ciągów ........................................................ 315
8.5. Argumenty wiersza poleceń ...................................................................... 317
Algorytmy szyfrowania .............................................................................320
Przetwarzanie plików tekstowych .............................................................321
Wyszukiwanie duplikatów .......................................................................324
8.6. Dostęp swobodny i pliki binarne .............................................................. 324
8.6.1. Dostęp swobodny ....................................................................................324
Pliki binarne ............................................................................................325
8.6.2.
Przetwarzanie plików z obrazami .............................................................326
8.6.3.
IAS
Bazy danych a prywatność .......................................................................329
Podsumowanie rozdziału .................................................................................... 330
CPB
9. KLASY ......................................................................................................333
9.1. Programowanie obiektowe ....................................................................... 334
9.2.
Implementowanie prostej klasy ................................................................ 335
9.3. Określanie interfejsu publicznego klasy ..................................................... 338
Zapominanie o średniku ..........................................................................340
9.4. Projektowanie reprezentacji danych ......................................................... 341
9.5. Funkcje składowe ..................................................................................... 342
Implementowanie funkcji składowych ......................................................342
9.5.1.
Parametry jawne i niejawne .....................................................................343
9.5.2.
9.5.3. Wywoływanie funkcji składowej wewnątrz innej funkcji składowej ..........344
WDP Wszystkie dane składowe powinny być prywatne,
WDP
CPB
TS
TS
TS
a większość funkcji — publiczna ..............................................................347
Poprawne użycie słowa zastrzeżonego const ............................................347
9.6. Konstruktory ............................................................................................ 348
Próba wywołania konstruktora .................................................................350
Przeciążanie ............................................................................................351
Listy inicjatorów .......................................................................................351
Uniwersalna i jednolita składnia inicjacji ..................................................352
9.7. Rozwiązywanie problemów: śledzenie obiektów ...................................... 353
Implementowanie klasy ...........................................................................355
Implementowanie klasy reprezentującej konto bankowe ..........................358
Elektroniczne maszyny do głosowania ......................................................358
9.8. Rozwiązywanie problemów: znajdowanie klas ......................................... 360
Przekształcaj wektory równoległe w wektory obiektów .............................361
9.9. Osobna kompilacja .................................................................................. 363
9.10. Wskaźniki do obiektów ............................................................................ 367
9.10.1. Obiekty alokowane dynamicznie .............................................................367
9.10.2. Operator - ............................................................................................368
9.10.3. Wskaźnik this ...........................................................................................369
JTZ
P
IAS
WDP
Kup książkęPoleć książkę
Spis treści
11
9.11. Rozwiązywanie problemów: wzorce danych obiektu ................................ 369
9.11.1. Przechowywanie sumy całkowitej ............................................................370
9.11.2. Liczenie zdarzeń ......................................................................................371
9.11.3. Gromadzenie danych ..............................................................................371
9.11.4. Zarządzanie właściwościami obiektu ........................................................372
9.11.5. Modelowanie obiektów o różnych stanach ..............................................373
9.11.6. Opisywanie pozycji obiektu .....................................................................374
IAS
Oprogramowanie o otwartych źródłach i wolne oprogramowanie ............375
Podsumowanie rozdziału .................................................................................... 376
TS
CPB
CPB
CPB
WDP
10. DZIEDZICZENIE .....................................................................................379
10.1. Hierarchie dziedziczenia .......................................................................... 379
10.2. Implementowanie klas pochodnych ......................................................... 383
Dziedziczenie prywatne ...........................................................................386
Replikowanie składowych klasy bazowej ..................................................386
Przy odmiennych wartościach należy używać jednej klasy,
przy odmiennym działaniu — dziedziczenia ............................................387
Wywoływanie konstruktora klasy bazowej ...............................................387
10.3. Przesłanianie funkcji składowych .............................................................. 388
Zapominanie o podaniu nazwy klasy bazowej .........................................391
10.4. Funkcje wirtualne i polimorfizm ............................................................... 391
10.4.1. Problem odcinania ...................................................................................392
10.4.2. Wskaźniki do klasy bazowej i pochodnej .................................................393
10.4.3. Funkcje wirtualne ....................................................................................394
10.4.4. Polimorfizm .............................................................................................395
WDP
Nie używaj znaczników typów .................................................................398
CPB
Odcinanie obiektu ...................................................................................398
CPB
Nieudane przesłanianie funkcji wirtualnej ................................................399
TS
Wirtualne samowywołania .......................................................................400
JTZ
Opracowywanie hierarchii dziedziczenia .................................................400
P
Implementowanie hierarchii pracowników
na potrzeby przetwarzania odcinków wypłat ............................................406
Kto sprawuje kontrolę nad internetem? ....................................................406
Podsumowanie rozdziału .................................................................................... 408
IAS
11. REKURENCJA ..........................................................................................409
11.1. Liczby trójkątne ....................................................................................... 409
Śledzenie wykonania funkcji rekurencyjnych ...........................................413
Nieskończona rekurencja .........................................................................414
Wnioskowanie rekurencyjne ....................................................................415
Znajdowanie plików ................................................................................418
11.2. Rekurencyjne funkcje pomocnicze ........................................................... 418
CPB
CPB
JTZ
P
Kup książkęPoleć książkę12
Spis treści
11.3. Wydajność rekurencji ............................................................................... 419
11.4. Permutacje .............................................................................................. 423
11.5. Rekurencja wzajemna .............................................................................. 426
11.6. Poszukiwanie z nawrotami ....................................................................... 430
Wieże Hanoi ...........................................................................................436
Ograniczenia obliczeń komputerowych ...................................................436
Podsumowanie rozdziału .................................................................................... 439
P
IAS
TS
TS
TS
12. SORTOWANIE I WYSZUKIWANIE .........................................................441
12.1. Sortowanie przez wybieranie ................................................................... 441
12.2. Profilowanie algorytmu sortowania przez wybieranie ................................ 444
12.3. Analiza wydajności algorytmu sortowania przez wybieranie ...................... 445
O, omega i theta ......................................................................................447
Sortowanie przez wstawianie ...................................................................449
12.4. Sortowanie przez scalanie ........................................................................ 450
12.5. Analiza algorytmu sortowania przez scalanie ............................................. 453
Algorytm sortowania szybkiego ................................................................456
12.6. Wyszukiwanie .......................................................................................... 457
12.6.1. Wyszukiwanie liniowe .............................................................................457
12.6.2. Wyszukiwanie binarne .............................................................................459
WDP
Funkcje biblioteczne do sortowania i wyszukiwania binarnego .................462
TS
Definiowanie kolejności sortowania obiektów ..........................................462
12.7. Rozwiązywanie problemów: szacowanie czasu wykonania algorytmu ....... 463
12.7.1. Czas liniowy ............................................................................................463
12.7.2. Czas kwadratowy .....................................................................................464
12.7.3. Wzór trójkąta ...........................................................................................465
12.7.4. Czas logarytmiczny ..................................................................................467
P
Ulepszanie algorytmu sortowania przez wstawianie .................................468
IAS
Pierwsza programistka ..............................................................................468
Podsumowanie rozdziału .................................................................................... 469
13. ZAAWANSOWANE CECHY JĘZYKA C++ ..............................................471
13.1. Przeciążanie operatorów .......................................................................... 471
13.1.1. Funkcje operatorów .................................................................................472
13.1.2. Przeciążanie operatorów porównania ......................................................474
13.1.3. Wejście i wyjście ......................................................................................475
13.1.4. Operatory składowe .................................................................................476
TS
Przeciążanie operatorów inkrementacji i dekrementacji ...........................476
TS
Niejawne konwersje typów ......................................................................478
TS
Zwracanie referencji ................................................................................479
P
Klasa Fraction ..........................................................................................480
Kup książkęPoleć książkę
Spis treści
13
13.2. Automatyczne zarządzanie pamięcią ........................................................ 480
13.2.1. Konstruktory przydzielające pamięć .........................................................480
13.2.2. Destruktory ..............................................................................................482
13.2.3. Przeciążanie operatora przypisania ..........................................................483
13.2.4. Konstruktory kopiujące ............................................................................488
WDP
Używaj parametrów referencyjnych, by nie tworzyć kopii obiektów ........492
CPB
Definiowanie destruktora bez pozostałych dwu funkcji z „wielkiej trójki” .....492
TS
Wirtualne destruktory ..............................................................................493
TS
Powstrzymanie automatycznego tworzenia funkcji
zarządzających pamięcią .........................................................................494
Operacje przenoszenia ............................................................................494
Wskaźniki współdzielone .........................................................................496
Śledzenie zarządzania pamięcią w obiektach typu String ..........................496
13.3. Szablony .................................................................................................. 497
13.3.1. Szablony funkcji .......................................................................................497
13.3.2. Szablony klas ...........................................................................................499
TS
Parametry szablonów niedotyczące typów ...............................................501
Podsumowanie rozdziału .................................................................................... 502
TS
TS
P
14. LISTY POWIĄZANE, STOSY I KOLEJKI ...................................................503
14.1. Używanie list powiązanych ...................................................................... 503
14.2. Implementowanie list powiązanych .......................................................... 509
14.2.1. Klasy dla list, węzłów i iteratorów .............................................................509
Implementowanie iteratorów ...................................................................511
14.2.2.
14.2.3.
Implementowanie wstawiania i usuwania węzłów ....................................512
P
Implementowanie szablonu listy powiązanej ............................................522
14.3. Wydajność operacji na listach, tablicach i wektorach ................................ 523
14.4. Stosy i kolejki ........................................................................................... 527
14.5. Implementowanie stosów i kolejek ........................................................... 530
14.5.1. Stosy jako listy powiązane ........................................................................530
14.5.2. Stosy jako tablice .....................................................................................533
14.5.3. Kolejki jako listy powiązane .....................................................................534
14.5.4. Kolejki jako tablice cykliczne ....................................................................535
14.6. Zastosowania stosów i kolejek .................................................................. 536
14.6.1. Sprawdzanie zamknięcia nawiasów .........................................................536
14.6.2. Obliczanie wyrażeń zapisanych w odwrotnej notacji polskiej ...................537
14.6.3. Obliczanie wartości wyrażeń algebraicznych ............................................539
14.6.4. Poszukiwanie z nawrotami .......................................................................543
TS
Odwrotna notacja polska .........................................................................544
Podsumowanie rozdziału .................................................................................... 545
Kup książkęPoleć książkę14
Spis treści
15. ZBIORY, MAPY I TABLICE MIESZAJĄCE .................................................547
15.1. Zbiory ...................................................................................................... 547
15.2. Mapy ....................................................................................................... 551
WDP W przypadku iteratorów używaj typu auto ...............................................555
TS
Multizbiory i multimapy ...........................................................................555
P
Częstość występowania wyrazów .............................................................556
15.3. Implementowanie tablicy mieszającej ....................................................... 556
15.3.1. Skróty ......................................................................................................556
15.3.2. Tablice mieszające ...................................................................................558
15.3.3. Znajdowanie elementu ............................................................................559
15.3.4. Dodawanie i usuwanie elementów ..........................................................560
15.3.5. Przechodzenie po tablicy mieszającej ......................................................560
TS
Implementowanie funkcji skrótów ...........................................................566
TS
Adresowanie otwarte ...............................................................................568
Podsumowanie rozdziału .................................................................................... 570
16. STRUKTURY DRZEW ..............................................................................571
16.1. Podstawowe koncepcje dotyczące drzew ................................................. 571
16.2. Drzewa binarne ....................................................................................... 575
16.2.1. Przykłady drzew binarnych ......................................................................575
16.2.2. Drzewa zrównoważone ...........................................................................577
Implementacja drzewa binarnego ............................................................578
16.2.3.
P
Budowanie drzewa Huffmana ..................................................................580
16.3. Binarne drzewa poszukiwań ..................................................................... 580
16.3.1. Właściwość wyszukiwania binarnego .......................................................580
16.3.2. Wstawianie ..............................................................................................582
16.3.3. Usuwanie ................................................................................................584
16.3.4. Wydajność operacji .................................................................................586
16.4. Przeglądanie drzewa ................................................................................ 591
16.4.1. Przeglądanie poprzeczne .........................................................................591
16.4.2. Przeglądanie wzdłużne i wsteczne ...........................................................593
16.4.3. Wzorzec Wizytator ..................................................................................594
16.4.4. Przeszukiwanie w głąb i wszerz ................................................................595
16.4.5.
Iteratory drzew ........................................................................................596
16.5. Drzewa czerwono-czarne ......................................................................... 597
16.5.1. Podstawowe własności drzew czerwono-czarnych ...................................597
16.5.2. Wstawianie ..............................................................................................600
16.5.3. Usuwanie ................................................................................................601
P
Implementowanie drzewa czerwono-czarnego ........................................605
Podsumowanie rozdziału .................................................................................... 605
Kup książkęPoleć książkę
Spis treści
15
17. KOLEJKI PRIORYTETOWE I KOPCE .......................................................607
17.1. Kolejki priorytetowe ................................................................................. 607
Symulacja kolejki oczekujących klientów .................................................610
17.2. Kopce ...................................................................................................... 610
17.3. Algorytm sortowania przez kopcowanie .................................................... 621
Podsumowanie rozdziału .................................................................................... 626
P
A ZESTAWIENIE SŁÓW ZASTRZEŻONYCH ........................................................... 627
B ZESTAWIENIE OPERATORÓW .......................................................................... 631
C
KODY ZNAKÓW ............................................................................................... 633
D PRZEGLĄD BIBLIOTEKI C++ ............................................................................ 637
E WYTYCZNE DOTYCZĄCE PROGRAMOWANIA W JĘZYKU C++ ...................... 643
F
SYSTEMY LICZBOWE ......................................................................................... 651
SŁOWNICZEK .................................................................................................... 661
ŹRÓDŁA ILUSTRACJI ......................................................................................... 671
ŚCIĄGAWKA ...................................................................................................... 673
ALFABETYCZNA LISTA SKŁADNI
Definicja funkcji .......................................................................................... 184
Definicja funkcji składowej.......................................................................... 345
Definicja klasy ............................................................................................. 339
Definicja klasy pochodnej ........................................................................... 385
Definicja przeciążonego operatora .............................................................. 474
Definicja tablicy dwuwymiarowej................................................................ 247
Definicja zmiennej ........................................................................................ 60
Definiowanie struktury ................................................................................ 293
Definiowanie tablicy.................................................................................... 219
Definiowanie wektora ................................................................................. 254
Dynamiczna alokacja pamięci ..................................................................... 282
Instrukcja for ............................................................................................... 144
Instrukcja if.................................................................................................... 94
Instrukcja wejściowa...................................................................................... 79
Instrukcja while ........................................................................................... 134
Instrukcja wyjścia........................................................................................... 47
Konstruktor kopiujący.................................................................................. 489
Konstruktor z inicjatorem klasy bazowej...................................................... 388
Porównania ................................................................................................. 100
Praca ze strumieniami plikowymi ................................................................ 303
Program C++............................................................................................... 46
Przeciążony operator przypisania ................................................................ 487
Przypisanie .................................................................................................... 64
Składnia wskaźników................................................................................... 266
Szablon funkcji............................................................................................ 498
Szablon klasy............................................................................................... 500
Kup książkęPoleć książkę16
Elementy książki
Rozdział
Często
popełniany błąd
Jak to zrobić
i Przykłady
1. Wprowadzenie
Pomijanie średników
Błędna pisownia wyrazów
2. Podstawowe
typy danych
Używanie niezdefiniowanych
zmiennych
47
50
66
Używanie niezainicjowanych
zmiennych
66
Niezamierzone dzielenie całkowite 74
Niezamknięte nawiasy
74
Zapominanie o plikach
nagłówkowych
Błędy zaokrąglenia
Średnik po warunku if
Mylenie operatora = z ==
Dokładne porównywanie
75
76
96
101
liczb zmiennoprzecinkowych
102
3. Decyzje
Opisywanie algorytmu za pomocą
pseudokodu
Napisanie algorytmu układania
płytek podłogowych
Obliczanie czasu podróży
Przeprowadzanie obliczeń
Obliczenie kosztu znaczków
pocztowych
54
55
83
83
86
Implementacja instrukcji if
Wyodrębnianie ze środka
104
106
Problem z zawieszonym
słowem else
Łączenie wielu operatorów
relacyjnych
Mylenie warunków i ||
4. Pętle
Nieskończone pętle
Nie myśl w kategoriach
„Czy doszliśmy już do celu?”
Pomyłki o jeden
113
124
125
138
138
139
5. Funkcje
Brak wartości zwracanej
188
Tworzenie pętli
Przetwarzanie numerów
161
kart kredytowych
165
Manipulowanie pikselami obrazu 168
Implementowanie funkcji
Generowanie losowych haseł
Używanie debugera
Obliczanie oceny z przedmiotu
Wnioskowanie rekurencyjne
190
191
191
202
212
Kup książkęPoleć książkę
Elementy książki
17
Wskazówka dla
programistów
Temat
specjalny
Informatyka
a społeczeństwo
Komputery są wszędzie
Organizacje normalizacyjne
38
40
Błąd jednostki
zmiennoprzecinkowej
procesora Pentium
Alfabety międzynarodowe
i zestaw Unicode
77
91
48
68
69
69
77
77
99
Dysfunkcjonalne
systemy komputerowe
Sztuczna inteligencja
106
129
Pierwszy „bug”
Piractwo cyfrowe
140
177
Nagłe rozpowszechnienie się
komputerów osobistych
214
103
110
126
126
153
154
154
189
209
Kopie zapasowe
44
Sekwencje ucieczki
Wybieraj opisowe
nazwy zmiennych
Nie używaj sekretnych
numerów
Spacje w wyrażeniach
67
67
76
Typy liczbowe w C++
Zakresy i precyzja liczb
Definiowanie zmiennych
ze słowem auto
Rzutowania
Połączenie przypisania
i działań arytmetycznych
Operator warunkowy
Alfabetyczna
kolejność ciągów
Instrukcja switch
Skrócone
obliczanie wartości
operatorów logicznych
Prawa de Morgana
Czyszczenie stanu błędu
„Pętla i pół” oraz
instrukcja break
Przekierowywanie
wejścia i wyjścia
Deklaracje funkcji
Stałe referencje
Układ nawiasów klamrowych 96
Zawsze używaj
nawiasów klamrowych
Wcięcia
Unikaj duplikowania kodu
w gałęziach
97
97
98
Doprowadź do kompilacji
z brakiem ostrzeżeń
Ręczne śledzenie kodu
Opracuj harmonogram
i zarezerwuj czas na
nieoczekiwane problemy 120
103
114
Używaj pętli tylko do tego,
do czego została
przeznaczona
Wybierz zakres pętli
odpowiedni do zadania
Licz iteracje
Schematy blokowe pętli
Komentarze funkcji
Nie modyfikuj zmiennych
147
147
148
149
185
parametrycznych
187
Pilnuj, by funkcje były krótkie 200
200
Śledzenie funkcji
Atrapy
202
Unikaj zmiennych globalnych 204
Preferuj wartości zwracane
zamiast parametrów
referencyjnych
208
Kup książkęPoleć książkę18
Elementy książki
Rozdział
6. Tablice i wektory
Często
popełniany błąd
Jak to zrobić
i Przykłady
Przekroczenie zakresu
Pomijanie rozmiaru kolumny
w dwuwymiarowym
parametrze tablicowym
222
25
268
274
283
284
310
Praca z tablicami
Rzut kostką
Tabela danych o ludności świata
240
243
253
Praca ze wskaźnikami
Tworzenie korespondencji
masowej
289
291
Przetwarzanie plików tekstowych 321
Wyszukiwanie duplikatów
324
7. Wskaźniki i
struktury
8. Strumienie
Mylenie wskaźników z danymi,
na które wskazują
Zwracanie wskaźnika wskazującego
na zmienną lokalną
Wiszące wskaźniki
Wycieki pamięci
Łączenie operacji wejścia
przy użyciu operatora
i funkcji getline
9. Klasy
Zapominanie o średniku
Próba wywołania konstruktora
340
350
Implementowanie klasy
Implementowanie klasy
355
reprezentującej konto bankowe 358
10. Dziedziczenie
Dziedziczenie prywatne
Replikowanie składowych
klasy bazowej
Zapominanie o podaniu
nazwy klasy bazowej
Odcinanie obiektu
Nieudane przesłanianie
funkcji wirtualnej
386
Opracowywanie hierarchii
dziedziczenia
Implementowanie hierarchii
pracowników na potrzeby
przetwarzania odcinków wypłat 406
400
386
391
398
399
Kup książkęPoleć książkę
Elementy książki
19
Wskazówka dla
programistów
Temat
specjalny
Informatyka
a społeczeństwo
Używaj tablic
do przechowywania serii
związanych ze sobą
wartości
222
Stosuj wektory zamiast tablic 260
Sortowanie za pomocą
biblioteki C++
Algorytm sortowania
Wyszukiwanie binarne
Stałe parametry tablicowe
Pętla for oparta na zakresie
231
231
233
237
260
Wirusy komputerowe
222
Używaj oddzielnej definicji
dla każdej zmiennej
wskaźnikowej
Programuj przejrzyście,
a nie sprytnie
269
275
Wszystkie dane składowe
powinny być prywatne,
a większość funkcji
— publiczna
Poprawne użycie słowa
zastrzeżonego const
Przekształcaj wektory
równoległe w wektory
obiektów
Przy odmiennych wartościach
należy używać jednej klasy,
przy odmiennym działaniu
— dziedziczenia
Nie używaj
znaczników typów
347
347
361
387
398
Wskaźniki i referencje
Przechodzenie po tablicy
przy użyciu wskaźnika
Stałe wskaźniki
Praca z ciągami w stylu C
Wskaźniki inteligentne
Sprawdzanie błędu
strumienia
Standard Unicode,
kodowanie UTF-8
i ciągi C++
Przeciążanie
Listy inicjatorów
Uniwersalna i jednolita
składnia inicjacji
269
Systemy wbudowane
291
273
275
279
298
311
314
351
351
352
Algorytmy szyfrowania
Bazy danych a prywatność
320
329
Elektroniczne maszyny
do głosowania
Oprogramowanie
358
o otwartych źródłach
i wolne oprogramowanie 375
Wywoływanie konstruktora
klasy bazowej
Wirtualne samowywołania
387
400
Kto sprawuje kontrolę
nad internetem?
406
Kup książkęPoleć książkę20
Elementy książki
Rozdział
11. Rekurencja
12. Sortowanie
i wyszukiwanie
Często
popełniany błąd
Jak to zrobić
i Przykłady
Śledzenie wykonania funkcji
rekurencyjnych
Nieskończona rekurencja
413
414
Wnioskowanie rekurencyjne
Znajdowanie plików
Wieże Hanoi
Ulepszanie algorytmu sortowania
przez wstawianie
415
418
436
468
13. Zaawansowane
cechy
języka C++
Definiowanie destruktora
bez pozostałych dwu funkcji
z „wielkiej trójki”
Klasa Fraction
Śledzenie zarządzania pamięcią
w obiektach typu String
480
496
492
14. Listy powiązane,
stosy i kolejki
15. Zbiory,
mapy i tablice
mieszające
16. Struktury drzew
17. Kolejki
priorytetowe
i kopce
Implementowanie szablonu
listy powiązanej
522
Częstość występowania wyrazów 556
Budowanie drzewa Huffmana
Implementowanie drzewa
czerwono-czarnego
Symulacja kolejki oczekujących
klientów
580
605
610
Kup książkęPoleć książkę
Elementy książki
21
Wskazówka dla
programistów
Temat
specjalny
Informatyka
a społeczeństwo
Ograniczenia obliczeń
komputerowych
436
Pierwsza programistka
468
Funkcje biblioteczne
do sortowania
i wyszukiwania binarnego 462
Używaj parametrów
referencyjnych, by nie
tworzyć kopii obiektów
492
W przypadku iteratorów
używaj typu auto
555
O, omega i theta
447
Sortowanie przez wstawianie 449
Algorytm sortowania
szybkiego
Definiowanie kolejności
sortowania obiektów
456
462
Przeciążanie operatorów
inkrementacji
i dekrementacji
476
Niejawne konwersje typów 478
479
Zwracanie referencji
Wirtualne destruktory
493
Powstrzymanie
automatycznego
tworzenia funkcji
zarządzających pamięcią 494
494
496
Operacje przenoszenia
Wskaźniki współdzielone
Parametry szablonów
niedotyczące typów
Odwrotna notacja polska
Multizbiory i multimapy
Implementowanie
funkcji skrótów
Adresowanie otwarte
501
544
555
566
568
Kup książkęPoleć książkę22
Elementy książki
Kup książkęPoleć książkę6
Tablice i wektory
W wielu programach trzeba gromadzić dużą liczbę danych. Standard C++ pozwala
na używanie w tym celu tablic i wektorów. Tablice są podstawową strukturą języka.
Standardowa biblioteka C++ zawiera konstrukcję vector, która przy pracy z kolek-
cjami o nieznanym rozmiarze jest wygodniejszą alternatywą dla tablic. W rozdziale tym
poznasz tablice i wektory oraz popularne algorytmy służące do ich przetwarzania.
Cele rozdziału:
Dowiesz się, jak gromadzić wartości w tablicach i wektorach.
Poznasz najczęściej używa
Pobierz darmowy fragment (pdf)
Gdzie kupić całą publikację:
Opinie na temat publikacji:
Inne popularne pozycje z tej kategorii:
Czytaj również:
Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką :