- -5%
ebook C++. Intensywny kurs
Josh Lospinoso
Wydawca:
Wydawnictwo Naukowe PWN
Rok wydania:
2021
Książka „Intensywny kurs języka C++” jest przeznaczona dla średnio zaawansowanych i zaawansowanych programistów. Po krótkim wprowadzeniu od razu wprowadzi Cię w świat języka C++17 będącego najnowszą wersją standardu ISO. Część I obejmuje podstawowy język C++, poczynając od typów i funkcji, a kończąc na cyklu życia obiektu i wyrażeniach. W części II przedstawiono bibliotekę standardową i biblioteki Boost. Zapoznasz się ze specjalnymi klasami użytkowymi, strukturami danych i algorytmami, a także ze sposobami obsługi systemów plików i tworzeniem programów o wysokiej wydajności wykorzystujących sieć.
Spis treści ebooka C++. Intensywny kurs
PRZEDMOWA XXVPODZIĘKOWANIA XXIX
WSTĘP XXXI
O książce XXXII
Dla kogo jest przeznaczona ta książka? XXXIII
Co znajduje się w tej książce? XXXIII
Część I: Język C++ XXXIII
Część II: Biblioteki i platformy XXXIV
WSTĘP DLA PROGRAMISTÓW C XXXVII
Uaktualnienie języka C do Super C XXXIX
Przeciążanie funkcji XXXIX
Referencje XL
Inicjalizacja z użyciem słowa kluczowego auto XLIII
Przestrzenie nazw i niejawne użycie słowa typedef z typami struct, union i enum XLIV
Łączenie plików obiektowych języków C i C++ XLVI
Główne cechy języka C++ XLVII
Zwięzłe wyrażanie idei i ponowne wykorzystanie kodu XLVIII
Biblioteka standardowa C++ XLIX
Wyrażenia lambda LI
Programowanie generyczne z użyciem szablonów LII
Niezmienniki klas i zarządzanie zasobami LIII
Semantyka przenoszenia LVII
Zrelaksuj się i ciesz się swoimi nowymi butami LVIII
CZĘŚĆ I: JĘZYK C++ 1
1. GOTOWI DO PRACY 3
Struktura prostego programu C++ 4
Stworzenie pierwszego pliku źródłowego w języku C++ 4
Funkcja main: punkt startowy programu 4
Biblioteki: wykorzystywanie kodu zewnętrznego 5
Zestaw narzędzi kompilatora 5
Konfigurowanie środowiska programistycznego 6
System Windows 10 i nowsze wersje: Visual Studio 6
System macOS: Xcode .8
System Linux: Xcode 10
Instalowanie kompilatora GCC na podstawie źródeł 10
Edytory tekstu 13
Rozpoczęcie samodzielnej pracy z językiem C++ 14
System typów języka C++ 14
Deklarowanie zmiennych .14
Inicjalizowanie stanu zmiennej 15
Instrukcje warunkowe 15
Funkcje 17
Specyfikatory formatowania w funkcji printf 19
Kolejne podejście do funkcji step_function 20
Komentarze 22
Debugowanie 22
Visual Studio 22
Xcode 24
Debugowanie w kompilatorach GCC i Clang za pomocą debuggerów GDB i LLDB 26
Podsumowanie 29
2. TYPY 31
Typy podstawowe 31
Typy całkowite 32
Typy zmiennoprzecinkowe 35
Typy znakowe 37
Typy logiczne 39
Typ std::byte 41
Typ size_t 42
Typ void 43
Tablice 44
Inicjalizacja tablicy 44
Dostęp do elementów tablicy 44
Zwięzła prezentacja pętli 45
Łańcuchy w stylu języka C 47
Typy zdefiniowane przez użytkownika 51
Typy wyliczeniowe 51
Klasy używające tradycyjnych struktur danych 54
Unie 56
W pełni funkcjonalne klasy C++ 57
Metody 57
Kontrola dostępu 58
Konstruktory 61
Inicjalizacja 62
Destruktor 68
Podsumowanie 68
3. TYPY REFERENCYJNE 71
Wskaźniki 71
Adresowanie zmiennych 72
Wyłuskiwanie zmiennych 74
Szczegółowy spis treści xiii
Operator odwołania do składowej przez wskaźnik 75
Wskaźniki i tablice 76
Wskaźniki są niebezpieczne 79
Wskaźniki void i std::byte 81
Literał nullptr i wyrażenia logiczne 81
Referencje 81
Użycie wskaźników i referencji 82
Jednokierunkowe listy łączone: podstawowa struktura oparta na wskaźnikach 82
Stosowanie referencji 85
Wskaźniki this 86
Poprawa bezpieczeństwa za pomocą słowa kluczowego const 87
Zmienne składowe const 88
Listy inicjalizacyjne składowych 89
Dedukcja typu z użyciem słowa kluczowego auto 90
Inicjalizacja z użyciem słowa kluczowego auto 90
Słowo kluczowe auto i typy referencyjne 91
Słowo kluczowe auto i refaktoryzacja kodu 91
Podsumowanie 92
4. CYKL ŻYCIA OBIEKTU 93
Czas przechowywania obiektu 93
Alokacja, dealokacja i czas życia 94
Zarządzanie pamięcią 94
Automatyczny czas przechowywania 94
Statyczny czas przechowywania 95
Czas przechowywania lokalny dla wątku 98
Dynamiczny czas przechowywania 99
Śledzenie cyklu życia obiektu 101
Wyjątki 103
Słowo kluczowe throw 103
Użycie bloków try-catch 104
Klasy wyjątków biblioteki stdlib 106
Obsługa wyjątków 107
Wyjątki definiowane przez użytkownika 110
Słowo kluczowe noexcept 110
Stos wywołań i wyjątki 110
Klasa SimpleString 112
Dołączanie łańcuchów i ich wyświetlanie 114
Użycie klasy SimpleString 115
Wykorzystywanie klasy SimpleString 116
Zwijanie stosu wywołań 117
Wyjątki i wydajność 119
Alternatywy dla wyjątków 120
Semantyka kopiowania 121
Konstruktory kopiujące 123
Przypisanie kopiujące 126
Kopiowanie domyślne 128
Wskazówki dotyczące kopiowania 129
Semantyka przenoszenia 129
Kopiowanie może być nieekonomiczne 130
Kategorie wartości 131
Referencje do l-wartości i r-wartości 132
Funkcja std::move 133
Konstruktor przenoszący 134
Przypisanie przenoszące 134
Wersja końcowa 136
Metody generowane przez kompilator 138
Podsumowanie 139
5. POLIMORFIZM CZASU WYKONANIA 141
Polimorfizm 142
Motywujący przykład 142
Dodawanie nowych modułów logowania 144
Interfejsy 145
Składanie obiektów i dziedziczenie implementacji 145
Definiowanie interfejsów 146
Dziedziczenie po klasie nadrzędnej 146
Dziedziczenie składowych 147
Metody wirtualne 148
Czysto wirtualne klasy i wirtualne destruktory 150
Implementacja interfejsów 152
Użycie interfejsów 152
Aktualizacja programu rejestrującego transakcje bankowe 152
Wstrzykiwanie konstruktorem 153
Wstrzykiwanie przez właściwości 154
Wybór między wstrzykiwaniem konstruktorem a wstrzykiwaniem przez właściwości 155
Podsumowanie 156
6. POLIMORFIZM CZASU KOMPILACJI 157
Szablony 157
Deklarowanie szablonów 158
Definicja szablonu klasy 158
Definicja szablonu funkcji 159
Konkretyzowanie szablonów 159
Operatory rzutowania 159
Operator const_cast 160
Operator static_cast 160
Operator reinterpret_cast 161
Operator narrow_cast 162
Przykład użycia szablonu funkcji: funkcja mean wyznaczająca średnią 164
Uogólnianie funkcji mean 164
Dedukcja typu szablonu 167
Przykład użycia klasy szablonowej: SimpleUniquePointer 168
Kontrola typów w szablonach 170
Koncepty 172
Definiowanie konceptu 173
Cechy typu 173
Wymagania 175
Tworzenie konceptów z wyrażeń requires 176
Użycie konceptów 177
Doraźne wyrażenia requires 182
Wyrażenie static_assert: rozwiązanie tymczasowe dla kodu bez konceptów 183
Parametry szablonowe niebędące typami 184
Szablony wariadyczne 187
Zaawansowane zagadnienia związane z szablonami 188
Specjalizacja szablonu 188
Wiązanie nazw 188
Funkcja typu 188
Metaprogramowanie szablonów 188
Organizacja kodu źródłowego szablonów 189
Polimorfizm czasu kompilacji a polimorfizm czasu wykonania 189
Podsumowanie 190
7. WYRAŻENIA 191
Operatory 191
Operatory logiczne 191
Operatory arytmetyczne 192
Operatory przypisania 194
Operatory inkrementacji i dekrementacji 195
Operatory porównania 195
Operatory dostępu do składowych 196
Trójargumentowy operator warunkowy 196
Operator przecinkowy 197
Przeciążenie operatora 197
Przeciążanie operatora new 199
Priorytet i łączność operatorów 205
Kolejność ewaluacji 207
Literały definiowane przez użytkownika 208
Konwersje typów 209
Niejawne konwersje typów 209
Jawne konwersje typów 212
Rzutowania w stylu C 213
Konwersje typów definiowane przez użytkownika 215
Wyrażenia stałe 216
Kolorowy przykład 217
Użycie słowa kluczowego constexpr 219
Wyrażenia volatile 219
Podsumowanie 221
8. INSTRUKCJE 223
Instrukcje wyrażeń 223
Instrukcje złożone 224
Instrukcje deklaracji 225
Funkcje 225
Przestrzenie nazw 229
Aliasy typów 232
Wiązania strukturalne 234
Atrybuty 236
Instrukcje wyboru 237
Instrukcje if 237
Instrukcje switch 241
Instrukcje iteracyjne 243
Pętle while 243
Pętle do-while 244
Pętle for 245
Pętle for oparte na zakresie 247
Instrukcje skoku 251
Instrukcje break 251
Instrukcje continue 252
Instrukcje goto 253
Podsumowanie 254
9. FUNKCJE 257
Deklaracje funkcji 258
Modyfikatory przedrostkowe 258
Modyfikatory przyrostkowe 259
Typy zwracane auto 261
Użycie słowa kluczowego auto w szablonach funkcji 262
Rozwiązywanie przeciążenia 263
Funkcje wariadyczne 264
Szablony wariadyczne 266
Programowanie z użyciem pakietu parametrów 266
Ponowne zaprogramowanie funkcji sum 267
Wyrażenia fold 268
Wskaźniki do funkcji 268
Deklaracja wskaźnika do funkcji 268
Aliasy typów i wskaźniki do funkcji 270
Operator wywołania funkcji 270
Przykładowa funkcja zliczająca 271
Wyrażenia lambda 273
Użycie 273
Parametry i treść wyrażenia lambda 274
Argumenty domyślne 275
Generyczne wyrażenia lambda 275
Typy zwracane w wyrażeniach lambda 277
Przechwytywanie w wyrażeniu lambda 277
Wyrażenia lambda ze specyfikatorem constexpr 284
Klasa std::function 284
Deklarowanie obiektu klasy function 285
Przykład zaawansowany 286
Funkcja main i wiersz poleceń 287
Trzy przeciążenia funkcji main 288
Analiza parametrów programu 288
Bardziej zaawansowany przykład 290
Status zakończenia programu 292
Podsumowanie 293
CZĘŚĆ II: BIBLIOTEKI I PLATFORMY295
10. TESTOWANIE 297
Testy jednostkowe 297
Testy integracyjne 298
Testy akceptacyjne 298
Testy wydajnościowe 298
Zaawansowany przykład: operacja hamowania 299
Implementacja klasy AutoBrake 301
Projektowanie sterowane testami (TDD) 302
Dodawanie interfejsu do magistrali usługowej 314
Testy jednostkowe i platformy imitacyjne 321
Catch: platforma zarządzająca testami jednostkowymi 321
Google Test 328
Boot Test 336
Podsumowanie: platformy testujące 342
Platformy imitacyjne 342
Google Mock 344
HippoMock 353
Inne platformy imitacyjne: FakeIt i Trompeloeil 357
Podsumowanie 358
11. WSKAŹNIKI INTELIGENTNE 361
Wskaźniki inteligentne 361
Modele własności wskaźników inteligentnych 362
Wskaźniki scoped_ptr 362
Konstruowanie 363
Stworzenie środowiska testowego 363
Niejawna konwersja na typ logiczny na podstawie prawa własności 364
Opakowanie RAII 365
Semantyka wskaźnikowa 365
Porównywanie z wartością nullptr 366
Zamiana 366
Resetowanie i podmiana wskaźników scoped_ptr 367
Brak prawa przenoszenia 368
Typ boost::scoped_array 369
Skrócona lista wspieranych operacji 369
Wskaźniki unique_ptr 370
Konstruowanie 370
Wspierane operacje 371
Własność wyłączna i przenaszalna 371
Tablice wskaźników unique_ptr 372
Dealokatory 373
Użycie własnych dealokatorów w programowaniu systemowym 373
Skrócona lista wspieranych operacji 376
Wskaźniki shared_ptr 377
Konstruowanie 377
Określanie alokatora 378
Wspierane operacje 379
Własność niewyłączna i przenaszalna 379
Tablice shared_ptr 380
Dealokatory 380
Skrócona lista wspieranych operacji 381
Wskaźniki weak_ptr 382
Konstruowanie 383
Uzyskiwanie tymczasowego prawa własności 383
Wzorce zaawansowane 384
Wspierane operacje 384
Wskaźniki instrusive_ptr 385
Podsumowanie opcji związanych ze wskaźnikami inteligentnymi 387
Alokatory 387
Podsumowanie 390
12. NARZĘDZIA 393
Struktury danych 394
Klasa tribool 394
Klasa optional 396
Klasa pair 399
Klasa tuple 401
Klasa any 402
Klasa variant 404
Data i czas 408
Biblioteka DateTime z pakietu Boost 408
Biblioteka Chrono 412
Narzędzia numeryczne 418
Funkcje numeryczne 418
Liczby zespolone 420
Stałe matematyczne 421
Liczby losowe 422
Limity numeryczne 427
Konwersje numeryczne w bibliotece Boost 428
Arytmetyka liczb wymiernych w czasie kompilacji 430
Podsumowanie 432
13. KONTENERY 433
Kontenery sekwencyjne 434
Kontenery array 434
Kontenery vector 442
Rzadziej używane kontenery sekwencyjne 451
Kontenery asocjacyjne 462
Kontener set 463
Kontener multiset 469
Kontener map 475
Rzadziej używane kontenery asocjacyjne 483
Grafy i drzewa właściwości 484
Biblioteka Boost Graph Library 485
Szczegółowy spis treści xix
Drzewa właściwości w bibliotece Boost 486
Kontener initializer_list 488
Podsumowanie 489
14. ITERATORY 493
Kategorie iteratorów 494
Iteratory wyjściowe 494
Iteratory wejściowe 497
Iteratory postępujące 498
Iteratory dwukierunkowe 500
Iteratory o dostępie swobodnym 501
Iteratory ciągłe 502
Iteratory mutowalne 502
Pomocnicze funkcje iteratorów 503
Funkcja std::advance 504
Funkcje std::next i std::prev 505
Funkcje std::distance 506
Funkcje std::iter_swap 507
Dodatkowe adaptery iteratorów 507
Adaptery iteratorów przenoszących 507
Adaptery iteratorów wstecznych 509
Podsumowanie 511
15. ŁAŃCUCHY 513
Typ std::string 514
Konstruowanie 514
Zarządzanie pamięcią i optymalizacje niewielkich łańcuchów 518
Dostęp do elementów i iteratorów 519
Porównywanie łańcuchów 521
Przetwarzanie elementów 522
Wyszukiwanie 528
Konwersje numeryczne 532
Widok na łańcuch 534
Konstruowanie 535
Operacje wspierane przez klasę string_view 536
Prawa własności, użycie i wydajność 537
Wyrażenia regularne 538
Wzorce 538
Klasa basic_regex 540
Algorytmy 541
Algorytmy związane z łańcuchami dostępne w pakiecie Boost 545
Zakresy biblioteki Boost 545
Predykaty 546
Klasyfikatory 548
Wyszukiwacze 549
Algorytmy modyfikujące 550
Dzielenie i łączenie 553
Wyszukiwanie 555
Tokenizer z pakietu Boost 556
Lokalizacje 557
Podsumowanie 557
16. STRUMIENIE 559
Strumienie 559
Klasy strumieni 560
Stan strumienia 567
Buforowanie i opróżnianie bufora 569
Manipulatory 570
Typy zdefiniowane przez użytkownika 572
Strumienie związane z łańcuchami 575
Strumienie plikowe 579
Bufory strumieniowe 585
Dostęp swobodny 587
Podsumowanie 588
17. SYSTEMY PLIKÓW 591
Pojęcia dotyczące systemu plików 592
Klasa std::filesystem::path 592
Tworzenie ścieżek 593
Dzielenie ścieżek na części składowe 593
Modyfikowanie ścieżek 595
Podsumowanie metod związanych z systemem plików dostępnych w klasie path 596
Pliki i katalogi 597
Obsługa błędów 598
Funkcje tworzące ścieżkę 598
Sprawdzanie typów plików 599
Sprawdzanie plików i katalogów 601
Modyfikowanie plików i katalogów 603
Iteratory katalogów 605
Konstruowanie 605
Elementy katalogu 606
Rekurencyjne iterowanie po katalogach 608
Wykorzystanie strumieni fstream 610
Podsumowanie 612
18. ALGORYTMY 615
Złożoność obliczeniowa algorytmów 616
Zasady wykonywania 617
Operacje niemodyfikujące kolekcje 618
Algorytm all_of 618
Algorytm any_of 619
Algorytm none_of 620
Algorytm for_each 621
Algorytm for_each_n 623
Algorytmy find, find_if i find_if_not 624
Algorytm find_end 626
Algorytm find_first_of 627
Algorytm adjacent_find 628
Algorytmy count i count_if 629
Algorytm mismatch 630
Algorytm equal 631
Algorytm is_permutation 632
Algorytm search 634
Algorytm search_n 635
Operacje modyfikujące kolekcje 636
Algorytm copy 636
Algorytm copy_n 637
Algorytm copy_backward 638
Algorytm move 639
Algorytm move_backward 640
Algorytm swap_ranges 642
Algorytm transform 642
Algorytm replace 644
Algorytm fill 646
Algorytm generate 647
Algorytm remove 648
Algorytm unique 650
Algorytm reverse 651
Algorytm sample 652
Algorytm shuffle 654
Operacje związane z sortowaniem 656
Algorytm sort 657
Algorytm stable_sort 658
Algorytm partial_sort 660
Algorytm is_sorted 661
Algorytm nth_element 662
Wyszukiwanie binarne 663
Algorytm lower_bound 664
Algorytm upper_bound 664
Algorytm equal_range 665
Algorytm binary_search 666
Algorytmy oparte na podziałach 667
Algorytm is_partitioned 667
Algorytm partition 668
Algorytm partition_copy 669
Algorytm stable_partition 671
Algorytmy scalające 672
Algorytm merge 672
Algorytmy wartości ekstremalnych 673
Algorytmy min i max 673
Algorytmy min_element i max_element 675
Algorytm clamp 676
Operacje numeryczne 677
Przydatne operatory 677
Algorytm iota 678
Algorytm accumulate 678
Algorytm reduce 680
Algorytm inner_product 681
Algorytm adjacent_difference 682
Algorytm partial_sum 683
Inne algorytmy 684
Biblioteka Boost Algorithm 686
19. WSPÓŁBIEŻNOŚĆ I RÓWNOLEGŁOŚĆ 689
Programowanie współbieżne 690
Zadania asynchroniczne 690
Współdzielenie i koordynacja 698
Niskopoziomowe funkcje związane ze współbieżnością 710
Algorytmy równoległe 711
Przykład: sortowanie równoległe 711
Algorytmy równoległe nie są magiczne 712
Podsumowanie 713
20. PROGRAMOWANIE SIECIOWE Z UŻYCIEM BIBLIOTEKI BOOST ASIO 715
Model programowania biblioteki Boost Asio 716
Programowanie sieciowe z użyciem biblioteki Asio 718
Protokół internetowy 718
Rozwiązywanie nazwy hosta 720
Nawiązywanie połączenia 722
Bufory 724
Odczytywanie danych z buforów i zapisywanie do nich 727
Hypertext Transfer Protocol (HTTP) 729
Implementacja prostego klienta HTTP za pomocą biblioteki Boost Asio 731
Asynchroniczne odczytywanie i zapisywanie 733
Tworzenie serwera 737
Wielowątkowość biblioteki Boost Asio 741
Podsumowanie 743
21. TWORZENIE APLIKACJI 745
Wsparcie programu 746
Obsługa zakończenia programu i zwalniania zasobów 747
Komunikacja z systemem operacyjnym 751
Obsługa sygnałów systemu operacyjnego 753
Biblioteka Boost ProgramOptions 755
Opis opcji 756
Parsowanie opcji 758
Przechowywanie opcji i dostęp do nich 759
Wykorzystanie zdobytej wiedzy 761
Specyficzne zagadnienia związane z kompilacją 763
Przywitaj się ponownie z preprocesorem 763
Optymalizacje kompilatora 766
Konsolidacja z językiem C 767
Podsumowanie 768
SKOROWIDZ 771
Szczegóły ebooka C++. Intensywny kurs
- Wydawca:
- Wydawnictwo Naukowe PWN
- Rok wydania:
- 2021
- Typ publikacji:
- Ebook
- Język:
- polski
- Format:
- epub,mobi
- ISBN:
- 978-83-01-21740-2
- ISBN wersji papierowej:
- 978-83-01-21559-0
- Wydanie:
- 1
- Autorzy:
- Josh Lospinoso
- Tłumacze:
- Jacek Janusz
- Liczba Stron:
- 848
Recenzje ebooka C++. Intensywny kurs
-
Reviews (0)
Na jakich urządzeniach mogę czytać ebooki?
Na czytnikach Kindle, PocketBook, Kobo i innych
Na komputerach stacjonarnych i laptopach
Na telefonach z systemem ANDROID lub iOS
Na wszystkich urządzeniach obsługujących format plików PDF, Mobi, EPub
- -5%
-5%
169,00 zł
160,76 zł
@CUSTOMER_NAME@
@COMMENT_TITLE@
@COMMENT_COMMENT@