E-book details

Język C++. Owoce programowania. Wydanie IX

Język C++. Owoce programowania. Wydanie IX

Tony Gaddis

Ebook

C++ powstał w 1979 roku. Od tej pory cały czas się rozwija. Mimo że wymaga od programisty pewnej dyscypliny i staranności w pracy, jest chętnie wykorzystywany, daje bowiem ogromne możliwości i cechuje się elastycznością. W języku tym zaimplementowano mechanizmy programowania obiektowego. Opanowanie C++ nie tylko pozwala programistom tworzyć aplikacje dla praktycznie wszystkich platform, komputerów, serwerów i urządzeń mobilnych, ale również ułatwia naukę innych języków programowania. Aby w pełni skorzystać z tych zalet, trzeba od początku przykładać się do nauki pisania kodu z poszanowaniem dobrych praktyk.

To kolejne wydanie lubianego podręcznika programowania w języku C++; książka przeznaczona dla osób, które dopiero rozpoczynają naukę kodowania, i tych, które mają już doświadczenie z innymi językami. Znalazło się tu przystępne wyjaśnienie podstaw działania komputera oraz wprowadzenie do samego języka, a także mnóstwo pożytecznych wskazówek dla początkujących. Bardziej zaawansowani programiści docenią szczegółowe opisy niuansów, zawiłości i źródeł możliwych problemów. Książka jest napisana prostym, zrozumiałym językiem i zawiera wiele świetnie dobranych przykładów ilustrujących nie tylko funkcje i konstrukcje języka C++, ale również przypadki i sposoby ich użycia.

Najważniejsze zagadnienia:

  • przystępne wprowadzenie do C++
  • funkcje i klasy, tablice i wektory
  • wyrażenia lambda, wskaźniki i przeciążanie operatorów
  • dziedziczenie i polimorfizm
  • stosy, kolejki i rekurencja
  • - drzewa binarne: tworzenie i operacje na drzewach

Idź i programuj w C++!

 

Przedmowa 15

 

Rozdział 1. Wprowadzenie do komputerów i programowania 29

  • 1.1. Dlaczego tworzymy oprogramowanie? 29
  • 1.2. Systemy komputerowe: sprzęt i oprogramowanie 31
  • 1.3. Programy i języki programowania 37
  • 1.4. Z czego składa się program? 43
  • 1.5. Przyjmowanie danych, ich przetwarzanie i wynik 47
  • 1.6. Proces programowania 48
  • 1.7. Programowanie proceduralne i obiektowe 52
  • Pytania i ćwiczenia kontrolne 54

Rozdział 2. Wprowadzenie do języka C++ 57

  • 2.1. Elementy programu w języku C++ 57
  • 2.2. Obiekt cout 61
  • 2.3. Dyrektywa #include 66
  • 2.4. Zmienne, literały i wyrażenia przypisania 67
  • 2.5. Identyfikatory 71
  • 2.6. Typy danych liczb całkowitych 73
  • 2.7. Typ char 78
  • 2.8. Klasa string w C++ 82
  • 2.9. Typy danych liczb zmiennoprzecinkowych 84
  • 2.10. Typ danych bool 87
  • 2.11. Określanie rozmiaru typu danych 88
  • 2.12. Więcej o inicjowaniu zmiennych i przypisywaniu wartości 90
  • 2.13. Zasięg zmiennych 92
  • 2.14. Operatory arytmetyczne 93
  • 2.15. Komentarze 100
  • 2.16. Stałe nazwane 102
  • 2.17. Styl programowania 105
  • Pytania i ćwiczenia kontrolne 107
  • Wyzwania programistyczne 111

Rozdział 3. Wyrażenia i interaktywność 115

  • 3.1. Obiekt cin 115
  • 3.2. Wyrażenia matematyczne 121
  • 3.3. Gdy pomylisz jabłka z pomarańczami: konwersja typów 129
  • 3.4. Przepełnienie i zaniżenie 132
  • 3.5. Rzutowanie typów 133
  • 3.6. Wielokrotne przypisania i przypisania łączone 136
  • 3.7. Formatowanie wyjścia 140
  • 3.8. Operacje na znakach i obiekcie string 149
  • 3.9. Więcej matematycznych funkcji bibliotecznych 155
  • 3.10. Rzecz o debugowaniu: ręczne śledzenie programu 161
  • 3.11. Rozwiązywanie problemu: analiza przypadku 162
  • Pytania i ćwiczenia kontrolne 166
  • Wyzwania programistyczne 172

Rozdział 4. Podejmowanie decyzji 181

  • 4.1. Operatory relacji 181
  • 4.2. Instrukcja if 186
  • 4.3. Rozszerzanie instrukcji if 194
  • 4.4. Instrukcja if/else 197
  • 4.5. Zagnieżdżone struktury warunkowe 200
  • 4.6. Instrukcja if/else if 207
  • 4.7. Flagi 212
  • 4.8. Operatory logiczne 213
  • 4.9. Sprawdzanie przedziału liczbowego za pomocą operatorów logicznych 220
  • 4.10. Menu 222
  • 4.11. Rzecz o inżynierii oprogramowania: walidacja wejścia użytkownika 224
  • 4.12. Porównywanie typów char i string 226
  • 4.13. Operator warunkowy 230
  • 4.14. Instrukcja switch 233
  • 4.15. Więcej o blokach i zasięgu zmiennych 241
  • Pytania i ćwiczenia kontrolne 244
  • Wyzwania programistyczne 250

Rozdział 5. Pętle i pliki 261

  • 5.1. Operatory inkrementacji i dekrementacji 261
  • 5.2. Wprowadzenie do pętli: pętla while 266
  • 5.3. Walidacja wejścia za pomocą pętli while 273
  • 5.4. Liczniki 275
  • 5.5. Pętla do-while 276
  • 5.6. Pętla for 281
  • 5.7. Obliczanie sumy bieżącej 291
  • 5.8. Wartownik 293
  • 5.9. Rzecz o inżynierii oprogramowania: której pętli użyć? 295
  • 5.10. Pętle zagnieżdżone 296
  • 5.11. Zastosowanie plików do przechowywania danych 298
  • 5.12. Temat dodatkowy: przerywanie i kontynuowanie pętli 318
  • Pytania i ćwiczenia kontrolne 322
  • Wyzwania programistyczne 327

Rozdział 6. Funkcje 335

  • 6.1. Rzecz o inżynierii oprogramowania: programowanie modułowe 335
  • 6.2. Definicja i wywoływanie funkcji 336
  • 6.3. Prototypy funkcji 344
  • 6.4. Przekazywanie danych do funkcji 346
  • 6.5. Przekazywanie danych przez wartość 350
  • 6.6. Rzecz o inżynierii oprogramowania: zastosowanie funkcji w programie sterowanym przez menu 352
  • 6.7. Instrukcja return 356
  • 6.8. Zwracanie wartości z funkcji 357
  • 6.9. Zwracanie wartości boolowskiej 365
  • 6.10. Zmienne lokalne i globalne 367
  • 6.11. Statyczne zmienne lokalne 374
  • 6.12. Argumenty domyślne 378
  • 6.13. Zastosowanie wskaźników jako parametrów 381
  • 6.14. Przeciążanie funkcji 386
  • 6.15. Funkcja exit() 390
  • 6.16. Funkcje wirtualne i sterowniki 392
  • Pytania i ćwiczenia kontrolne 394
  • Wyzwania programistyczne 398
  • Projekt grupowy 406

Rozdział 7. Tablice i wektory 409

  • 7.1. Tablica jako zbiór wartości 409
  • 7.2. Dostęp do elementów tablicy 411
  • 7.3. Brak kontroli zakresów w języku C++ 422
  • 7.4. Zakresowa pętla for 425
  • 7.5. Przetwarzanie zawartości tablicy 429
  • 7.6. Rozwiązywanie problemu i projektowanie programu: tablice równoległe 437
  • 7.7. Tablice w argumentach funkcji 440
  • 7.8. Tablice dwuwymiarowe 450
  • 7.9. Tablice o trzech i większej liczbie wymiarów 457
  • 7.10. Rozwiązywanie problemu i projektowanie programu: analiza przypadku 459
  • 7.11. Wprowadzenie do typu STL vector 461
  • Pytania i ćwiczenia kontrolne 474
  • Wyzwania programistyczne 480

Rozdział 8. Przeszukiwanie i sortowanie tablic 489

  • 8.1. Rozwiązywanie problemu i projektowanie programu: wprowadzenie do algorytmów wyszukiwania danych 489
  • 8.2. Rozwiązywanie problemu i projektowanie programu: analiza przypadku 496
  • 8.3. Rozwiązywanie problemu i projektowanie programu: wprowadzenie do algorytmów sortowania 502
  • 8.4. Rozwiązywanie problemu i projektowanie programu: analiza przypadku 512
  • 8.5. Sortowanie i przeszukiwanie wektorów (kontynuacja podrozdziału 7.11) 520
  • Pytania i ćwiczenia kontrolne 523
  • Wyzwania programistyczne 524

Rozdział 9. Wskaźniki 529

  • 9.1. Uzyskiwanie adresu zmiennej 529
  • 9.2. Zmienne wskaźnikowe 531
  • 9.3. Relacja pomiędzy tablicą a wskaźnikiem 538
  • 9.4. Działania na wskaźnikach 542
  • 9.5. Inicjowanie wskaźników 543
  • 9.6. Porównywanie wskaźników 545
  • 9.7. Wskaźniki jako argumenty funkcji 546
  • 9.8. Dynamiczne przydzielanie pamięci 554
  • 9.9. Wskaźniki jako wyniki funkcji 558
  • 9.10. Inteligentne wskaźniki i zapobieganie wyciekom pamięci 565
  • 9.11. Rozwiązywanie problemu i projektowanie programu: analiza przypadku 569
  • Pytania i ćwiczenia kontrolne 574
  • Wyzwania programistyczne 578

Rozdział 10. O znakach, C-ciągach i więcej o klasie string 581

  • 10.1. Sprawdzanie znaków 581
  • 10.2. Zmiana wielkości liter 585
  • 10.3. C-ciągi 588
  • 10.4. Standardowe funkcje przetwarzające C-ciągi 592
  • 10.5. Funkcje konwertujące ciągi i liczby 602
  • 10.6. Rozwiązywanie problemu i projektowanie programu: tworzenie własnych funkcji przetwarzających C-ciągi 609
  • 10.7. Więcej o klasie string 614
  • 10.8. Rozwiązywanie problemu i projektowanie programu: analiza przypadku 627
  • Pytania i ćwiczenia kontrolne 628
  • Wyzwania programistyczne 631

Rozdział 11. Dane strukturalne 637

  • 11.1. Typy abstrakcyjne 637
  • 11.2. Struktury 639
  • 11.3. Dostęp do składników struktury 642
  • 11.4. Inicjowanie struktury 645
  • 11.5. Tablice struktur 648
  • 11.6. Inżynieria oprogramowania: struktury zagnieżdżone 651
  • 11.7. Struktury jako argumenty funkcji 654
  • 11.8. Struktury jako wyniki funkcji 657
  • 11.9. Wskaźniki do struktur 659
  • 11.10. Inżynieria oprogramowania: kiedy stosować kropkę, strzałkę i gwiazdkę? 662
  • 11.11. Typy wyliczeniowe 664
  • Pytania i ćwiczenia kontrolne 675
  • Wyzwania programistyczne 680

Rozdział 12. Zaawansowane operacje na plikach 687

  • 12.1. Operacje na plikach 687
  • 12.2. Formatowanie danych wyjściowych 693
  • 12.3. Umieszczanie obiektów plikowych w argumentach funkcji 695
  • 12.4. Dokładniejsze sprawdzanie błędów 697
  • 12.5. Funkcje do odczytywania i zapisywania danych 700
  • 12.6. Inżynieria oprogramowania: praca z wieloma plikami 707
  • 12.7. Pliki binarne 709
  • 12.8. Tworzenie rekordów danych za pomocą struktur 714
  • 12.9. Swobodny dostęp do plików 718
  • 12.10. Otwieranie pliku w trybach wejściowym i wyjściowym jednocześnie 725
  • Pytania i ćwiczenia kontrolne 730
  • Wyzwania programistyczne 734

Rozdział 13. Wprowadzenie do klas 739

  • 13.1. Programowanie proceduralne i obiektowe 739
  • 13.2. Wprowadzenie do klas 746
  • 13.3. Definiowanie instancji klasy 751
  • 13.4. Po co są prywatne elementy? 763
  • 13.5. Inżynieria oprogramowania: rozdzielenie specyfikacji i implementacji klasy 764
  • 13.6. Metody śródwierszowe 770
  • 13.7. Konstruktory 772
  • 13.8. Umieszczanie wartości w argumentach konstruktorów 778
  • 13.9. Destruktory 784
  • 13.10. Przeciążanie konstruktora 788
  • 13.11. Metody prywatne 793
  • 13.12. Tablice obiektów 794
  • 13.13. Rozwiązywanie problemu i projektowanie programu: przykład programowania obiektowego 798
  • 13.14. Programowanie obiektowe: symulowanie rzutów kostką za pomocą obiektów 805
  • 13.15. Projektowanie kodu obiektowego: język UML 808
  • 13.16. Projektowanie kodu obiektowego: dobór klas i określanie ich przeznaczenia 811
  • Pytania i ćwiczenia kontrolne 820
  • Wyzwania programistyczne 825

Rozdział 14. Więcej o klasach 837

  • 14.1. Instancje klasy i statyczne elementy członkowskie 837
  • 14.2. Klasy zaprzyjaźnione 844
  • 14.3. Przypisanie obiektowe 849
  • 14.4. Konstruktor kopiujący 850
  • 14.5. Przeciążanie operatorów 856
  • 14.6. Konwersja typów 882
  • 14.7. Agregacja obiektów 884
  • 14.8. Projektowanie kodu obiektowego: współpraca klas 889
  • 14.9. Programowanie obiektowe: symulacja gry Cho-Han 893
  • 14.10. Referencje do r-wartości i przenoszenie danych 903
  • Pytania i ćwiczenia kontrolne 912
  • Wyzwania programistyczne 917

Rozdział 15. Dziedziczenie klas, polimorfizm i funkcje wirtualne 925

  • 15.1. Co to jest dziedziczenie klas? 925
  • 15.2. Chronione elementy członkowskie i dostęp do klasy 933
  • 15.3. Konstruktory i destruktory w klasach bazowych i pochodnych 940
  • 15.4. Redefiniowanie funkcji klasy bazowej 952
  • 15.5. Hierarchia klas 956
  • 15.6. Polimorfizm i metody wirtualne 962
  • 15.7. Abstrakcyjne klasy bazowe i funkcje czysto wirtualne 977
  • 15.8. Wielodziedziczenie klas 984
  • Pytania i ćwiczenia kontrolne 990
  • Wyzwania programistyczne 995

Rozdział 16. Wyjątki i szablony 1003

  • 16.1. Wyjątki 1003
  • 16.2. Szablony funkcji 1021
  • 16.3. Inżynieria oprogramowania: od czego zacząć definiowanie szablonów funkcji? 1027
  • 16.4. Szablony klas 1027
  • Pytania i ćwiczenia kontrolne 1036
  • Wyzwania programistyczne 1039

Rozdział 17. Biblioteka STL 1041

  • 17.1. Wprowadzenie do biblioteki STL 1041
  • 17.2. Podstawowe informacje o kontenerach i iteratorach STL 1042
  • 17.3. Klasa vector 1053
  • 17.4. Klasy map, multimap i unordered_map 1066
  • 17.5. Klasy set, multiset i unordered_set 1091
  • 17.6. Algorytmy 1099
  • 17.7. Wprowadzenie do obiektów funkcyjnych i wyrażeń lambda 1120
  • Pytania i ćwiczenia kontrolne 1126
  • Wyzwania programistyczne 1131

Rozdział 18.Listy łączone 1137

  • 18.1. Wprowadzenie do list łączonych 1137
  • 18.2. Operacje na listach łączonych 1139
  • 18.3. Szablon listy łączonej 1155
  • 18.4. Odmiany listy łączonej 1166
  • 18.5. Standardowe kontenery list i forward_list 1166
  • Pytania i ćwiczenia kontrolne 1172
  • Wyzwania programistyczne 1174

Rozdział 19. Stosy i kolejki 1177

  • 19.1. Wprowadzenie do stosów 1177
  • 19.2. Stosy dynamiczne 1193
  • 19.3. Kontener stack 1203
  • 19.4. Wprowadzenie do kolejek 1205
  • 19.5. Kolejki dynamiczne 1216
  • 19.6. Kontenery deque i queue 1223
  • Pytania i ćwiczenia kontrolne 1226
  • Wyzwania programistyczne 1228

Rozdział 20. Rekurencja 1231

  • 20.1. Wprowadzenie do rekurencji 1231
  • 20.2. Rozwiązywanie problemów za pomocą rekurencji 1235
  • 20.3. Rozwiązywanie problemu i projektowanie programu: rekurencyjna funkcja gcd() 1242
  • 20.4. Rozwiązywanie problemu i projektowanie programu: zadania rekurencyjne 1243
  • 20.5. Rozwiązywanie problemu i projektowanie programu: rekurencyjne operacje na listach łączonych 1245
  • 20.6. Rozwiązywanie problemu i projektowanie programu: rekurencyjna funkcja wyszukiwania binarnego 1248
  • 20.7. Rozwiązywanie problemu i projektowanie programu: Wieże Hanoi 1250
  • 20.8. Rozwiązywanie problemu i projektowanie programu: algorytm sortowania szybkiego 1254
  • 20.9. Rozwiązywanie problemu i projektowanie programu: algorytm wyszukiwania wyczerpującego 1258
  • 20.10. Rozwiązywanie problemu i projektowanie programu: rekurencja a iteracja 1260
  • Pytania i ćwiczenia kontrolne 1261
  • Wyzwania programistyczne 1263

Rozdział 21. Drzewa binarne 1265

  • 21.1. Definicja i zastosowanie drzew binarnych 1265
  • 21.2. Operacje przeszukiwania drzewa binarnego 1269
  • 21.3. Szablon klasy do obsługi drzewa binarnego 1285
  • Pytania i ćwiczenia kontrolne 1290
  • Wyzwania programistyczne 1291

Dodatek A. Zestaw znaków ASCII 1295

Dodatek B. Hierarchia operatorów 1299

Dodatek C. Odpowiedzi do punktów kontrolnych 1307

Dodatek D. Odpowiedzi do pytań i ćwiczeń kontrolnych 1343

Skorowidz 1397

  • Title: Język C++. Owoce programowania. Wydanie IX
  • Author: Tony Gaddis
  • Original title: Starting Out with C++ from Control Structures through Objects (9th Edition)
  • Translation: Andrzej Watrak, Patryk Wierzchoń
  • ISBN: 978-83-283-4681-9, 9788328346819
  • Date of issue: 2019-04-23
  • Format: Ebook
  • Item ID: jezcow
  • Publisher: Helion