C++. Intensywny kurs

Szybkie wprowadzenie

3 oceny

Format:

epub, mobi, ibuk

DODAJ DO ABONAMENTU

WYBIERZ RODZAJ DOSTĘPU

152,10  169,00

Format: epub, mobi

 

Dostęp online przez myIBUK

WYBIERZ DŁUGOŚĆ DOSTĘPU

Cena początkowa: 169,00 zł (-10%)

Najniższa cena z 30 dni: 84,50 zł  


152,10

w tym VAT

TA KSIĄŻKA JEST W ABONAMENCIE

Już od 24,90 zł miesięcznie za 5 ebooków!

WYBIERZ SWÓJ ABONAMENT

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ć.


Rok wydania2021
Liczba stron848
KategoriaProgramowanie
WydawcaWydawnictwo Naukowe PWN
TłumaczenieJacek Janusz
ISBN-13978-83-01-21740-2
Numer wydania1
Język publikacjipolski
Informacja o sprzedawcyePWN sp. z o.o.

Ciekawe propozycje

Spis treści

  PRZEDMOWA XXV
  PODZIĘ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
RozwińZwiń