Facebook - konwersja
Pobierz fragment

Opus magnum C++. Programowanie w języku C++. Wydanie 3 poprawione. Komplet - ebook

Wydawnictwo:
Data wydania:
5 czerwca 2024
Format ebooka:
PDF
Format PDF
czytaj
na laptopie
czytaj
na tablecie
Format e-booków, który możesz odczytywać na tablecie oraz laptopie. Pliki PDF są odczytywane również przez czytniki i smartfony, jednakze względu na komfort czytania i brak możliwości skalowania czcionki, czytanie plików PDF na tych urządzeniach może być męczące dla oczu. Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na laptopie
Pliki PDF zabezpieczone watermarkiem możesz odczytać na dowolnym laptopie po zainstalowaniu czytnika dokumentów PDF. Najpowszechniejszym programem, który umożliwi odczytanie pliku PDF na laptopie, jest Adobe Reader. W zależności od potrzeb, możesz zainstalować również inny program - e-booki PDF pod względem sposobu odczytywania nie różnią niczym od powszechnie stosowanych dokumentów PDF, które odczytujemy każdego dnia.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
czytaj
na tablecie
Aby odczytywać e-booki na swoim tablecie musisz zainstalować specjalną aplikację. W zależności od formatu e-booka oraz systemu operacyjnego, który jest zainstalowany na Twoim urządzeniu może to być np. Bluefire dla EPUBa lub aplikacja Kindle dla formatu MOBI.
Informacje na temat zabezpieczenia e-booka znajdziesz na karcie produktu w "Szczegółach na temat e-booka". Więcej informacji znajdziesz w dziale Pomoc.
Pobierz fragment
249,00

Opus magnum C++. Programowanie w języku C++. Wydanie 3 poprawione. Komplet - ebook

Jedno C i same plusy!

 

Dawno, dawno temu, w głębokich latach osiemdziesiątych ubiegłego wieku pewien duński informatyk zainspirowany językiem C opracował jeden z najważniejszych, najbardziej elastycznych i do dziś niezastąpionych języków programowania — C++. Dziś ten język jest wykorzystywany do tworzenia gier komputerowych, obliczeń naukowych, technicznych, w medycynie, przemyśle i bankowości. NASA posługuje się nim w naziemnej kontroli lotów. Duża część oprogramowania Międzynarodowej Stacji Kosmicznej została napisana w tym języku. Nawet w marsjańskim łaziku Curiosity pracuje program w C++, który analizuje obraz z kamer i planuje dalszą trasę.

Autor tej książki — wybitny specjalista pracujący nad wieloma znaczącymi projektami we francuskich, niemieckich i włoskich instytutach fizyki jądrowej, znany czytelnikom m.in. z genialnej Symfonii C++ — postawił sobie za cel napisanie nowej, przekrojowej książki o tym języku, która w prostym, wręcz przyjacielskim stylu wprowadza czytelnika w fascynujący świat programowania zorientowanego obiektowo. Zobacz, jak potężny jest dzisiaj C++ 11.

Jeżeli chcesz nauczyć się tego języka w łatwy, pogodny, przyjazny sposób, ta książka jest właśnie dla Ciebie.

Dzięki tej książce poznasz:

  • Proste i złożone typy danych
  • Instrukcje sterujące
  • Funkcje i operatory
  • Wskaźniki
  • Klasy i dziedziczenie
  • Obsługę wyjątków
  • Wyrażenia lambda
  • Operacje wejścia-wyjścia
  • Projektowanie orientowane obiektowo
  • Szablony

Spis treści

0 Proszę tego nie czytać! 1

  • 0.1 Zaprzyjaźnijmy się! 1

1 Startujemy! 8

  • 1.1 Pierwszy program 8
  • 1.2 Drugi program 13
  • 1.3 Ćwiczenia 18

2 Instrukcje sterujące 20

  • 2.1 Prawda - fałsz, czyli o warunkach 20
    • 2.1.1 Wyrażenie logiczne 20
    • 2.1.2 Zmienna logiczna bool w roli warunku 21
    • 2.1.3 Stare dobre sposoby z dawnego C++ 21
  • 2.2 Instrukcja warunkowa if 22
  • 2.3 Pętla while 26
  • 2.4 Pętla do...while... 27
  • 2.5 Pętla for 28
  • 2.6 Instrukcja switch 31
  • 2.7 Co wybrać: switch czy if...else? 33
  • 2.8 Instrukcja break 36
  • 2.9 Instrukcja goto 37
  • 2.10 Instrukcja continue 39
  • 2.11 Klamry w instrukcjach sterujących 40
  • 2.12 Ćwiczenia 41

3 Typy 44

  • 3.1 Deklaracje typu 44
  • 3.2 Systematyka typów z języka C++ 45
  • 3.3 Typy fundamentalne 46
    • 3.3.1 Typy przeznaczone do pracy z liczbami całkowitymi 46
    • 3.3.2 Typy do przechowywania znaków alfanumerycznych 47
    • 3.3.3 Typy reprezentujące liczby zmiennoprzecinkowe 47
    • 3.3.4 bool - typ do reprezentacji obiektów logicznych 48
    • 3.3.5 Kwestia dokładności 49
    • 3.3.6 Jak poznać limity (ograniczenia) typów wbudowanych 51
  • 3.4 Typy o precyzyjnie żądanej szerokości 55
  • 3.5 InicjaLIZAcja, czyli nadanie wartości w momencie narodzin 59
  • 3.6 Definiowanie obiektów "w biegu" 60
  • 3.7 Stałe dosłowne 62
    • 3.7.1 Stałe dosłowne typu bool 63
    • 3.7.2 Stałe będące liczbami całkowitymi 63
    • 3.7.3 Stałe reprezentujące liczby zmiennoprzecinkowe 66
    • 3.7.4 Stała dosłowna nullptr - dla wskaźników 67
    • 3.7.5 Stałe znakowe 68
    • 3.7.6 Stałe tekstowe, napisy, albo po prostu stringi 71
    • 3.7.7 Surowe stałe tekstowe (napisy, stringi) 73
  • 3.8 Typy złożone 76
  • 3.9 Typ void 77
  • 3.10 Zakres ważności nazwy obiektu a czas życia obiektu 78
    • 3.10.1 Zakres: lokalny 78
    • 3.10.2 Zakres: instrukcja 79
    • 3.10.3 Zakres: blok funkcji 79
    • 3.10.4 Zakres: obszar pliku 80
    • 3.10.5 Zakres: obszar klasy 80
    • 3.10.6 Zakres określony przez przestrzeń nazw 80
  • 3.11 Zasłanianie nazw 85
  • 3.12 Specyfikator (przydomek) const 87
  • 3.13 Specyfikator (przydomek) constexpr 88
  • 3.14 Obiekty register 92
  • 3.15 Specyfikator volatile 93
  • 3.16 using oraz typedef - tworzenie dodatkowej nazwy typu 94
  • 3.17 Typy wyliczeniowe enum 97
    • 3.17.1 Dawne zwykłe enum a nowe zakresowe enum class 103
    • 3.17.2 Kilka uwag dla wtajemniczonych 106
  • 3.18 auto, czyli automatyczne rozpoznawanie typu definiowanego obiektu 106
  • 3.19 decltype - operator do określania typu zadanego wyrażenia 110
  • 3.20 Inicjalizacja z pustą klamą { }, czyli wartością domniemaną 111
  • 3.21 Przydomek alignas - adresy równe i równiejsze 114
  • 3.22 Ćwiczenia 115

4 Operatory 120

  • 4.1 Operatory arytmetyczne 120
    • 4.1.1 Operator %, czyli reszta z dzielenia (modulo) 121
    • 4.1.2 Jednoargumentowe operatory + i - 122
    • 4.1.3 Operatory inkrementacji i dekrementacji 122
    • 4.1.4 Operator przypisania = 124
  • 4.2 Operatory logiczne 125
    • 4.2.1 Operatory relacji 125
    • 4.2.2 Operatory sumy logicznej || oraz iloczynu logicznego && 126
    • 4.2.3 Wykrzyknik !, czyli operator negacji 128
  • 4.3 Operatory bitowe 128
    • 4.3.1 Przesuniecie w lewo << 129
    • 4.3.2 Przesunięcie w prawo >> 130
    • 4.3.3 Bitowe operatory sumy, iloczynu, negacji, różnicy symetrycznej 131
  • 4.4 Różnica między operatorami logicznymi a operatorami bitowymi 131
  • 4.5 Pozostałe operatory przypisania 133
  • 4.6 Operator uzyskiwania adresu (operator &) 135
  • 4.7 Wyrażenie warunkowe 135
  • 4.8 Operator sizeof 137
  • 4.9 Operator noexcept 138
  • 4.10 Deklaracja static_assert 138
  • 4.11 Operator alignof informujący o najkorzystniejszym wyrównaniu adresu 141
  • 4.12 Operatory rzutowania 142
    • 4.12.1 Rzutowanie według tradycyjnych (niezalecanych) sposobów 142
    • 4.12.2 Rzutowanie za pomoca nowych operatorów rzutowania 144
    • 4.12.3 Operator static_cast 144
    • 4.12.4 Operator const_cast 147
    • 4.12.5 Operator dynamic_cast 148
    • 4.12.6 Operator reinterpret_cast 148
  • 4.13 Operator: przecinek 149
  • 4.14 Priorytety operatorów 150
  • 4.15 Łączność operatorów 152
  • 4.16 Ćwiczenia 153

5 Typ string i typ vector - pierwsza wzmianka 157

  • 5.1 Typ std::string do pracy z tekstami 157
  • 5.2 Typ vector - długi rząd obiektów 162
  • 5.3 Zakresowe for 170
  • 5.4 Ćwiczenia 173

6 Funkcje 175

  • 6.1 Definicja funkcji i jej wywołanie 175
  • 6.2 Deklaracja funkcji 176
  • 6.3 Funkcja czesto wywołuje inna funkcję 178
  • 6.4 Zwracanie przez funkcję rezultatu 178
    • 6.4.1 Obiekt tworzony za pomocą auto, a inicjalizowany rezultatem funkcji 180
    • 6.4.2 O zwracaniu (lub niezwracaniu) rezultatu przez funkcję main 181
  • 6.5 Nowy, alternatywny sposób deklaracji funkcji 182
  • 6.6 Stos 184
  • 6.7 Przesyłanie argumentów do funkcji przez wartość 185
  • 6.8 Przesyłanie argumentów przez referencję 186
  • 6.9 Pożyteczne określenia: l-wartość i r-wartość 189
  • 6.10 Referencje do l-wartości i referencje do r-wartości jako argumenty funkcji 191
    • 6.10.1 Który sposób przesyłania argumentu do funkcji wybrać? 198
  • 6.11 Kiedy deklaracja funkcji nie jest konieczna? 199
  • 6.12 Argumenty domniemane 200
    • 6.12.1 Ciekawostki na temat argumentów domniemanych 203
  • 6.13 Nienazwany argument 208
  • 6.14 Funkcje inline (w linii) 209
  • 6.15 Przypomnienie o zakresie ważności nazw deklarowanych wewnatrz funkcji 213
  • 6.16 Wybór zakresu ważności nazwy i czasu życia obiektu 213
    • 6.16.1 Obiekty globalne 213
    • 6.16.2 Obiekty automatyczne 214
    • 6.16.3 Obiekty lokalne statyczne 215
  • 6.17 Funkcje w programie składającym się z kilku plików 219
    • 6.17.1 Nazwy statyczne globalne 223
  • 6.18 Funkcja zwracająca rezultat będący referencją l-wartości 224
  • 6.19 Funkcje rekurencyjne 229
  • 6.20 Funkcje biblioteczne 238
  • 6.21 Funkcje constexpr 241
    • 6.21.1 Wymogi, które musi spełniać funkcja constexpr (w standardzie C++11) 243
    • 6.21.2 Przykład pokazujący aspekty funkcji constexpr 244
    • 6.21.3 Argumenty funkcji constexpr będące referencjami 253
  • 6.22 Definiowanie referencji przy użyciu słowa auto 254
    • 6.22.1 Gdy inicjalizatorem jest wywołanie funkcji zwracającej referencję 261
  • 6.23 Ćwiczenia 264

7 Preprocesor 270

  • 7.1 Dyrektywa pusta # 270
  • 7.2 Dyrektywa #define 270
  • 7.3 Dyrektywa #undef 272
  • 7.4 Makrodefinicje 273
  • 7.5 Sklejacz nazw argumentów, czyli operator ## 275
  • 7.6 Parametr aktualny makrodefinicji - w postaci tekstu 276
  • 7.7 Dyrektywy kompilacji warunkowej 276
  • 7.8 Dyrektywa #error 280
  • 7.9 Dyrektywa #line 281
  • 7.10 Wstawianie treści innych plików do tekstu kompilowanego właśnie pliku 281
  • 7.11 Dyrektywy zależne od implementacji 283
  • 7.12 Nazwy predefiniowane 283
  • 7.13 Ćwiczenia 286

8 Tablice 289

  • 8.1 Co to jest tablica 289
  • 8.2 Elementy tablicy 290
  • 8.3 Inicjalizacja tablic 292
  • 8.4 Przekazywanie tablicy do funkcji 293
  • 8.5 Przykład z tablicą elementów typu enum 297
  • 8.6 Tablice znakowe 299
  • 8.7 Ćwiczenia 307

9 Tablice wielowymiarowe 312

  • 9.1 Tablica tablic 312
  • 9.2 Przykład programu pracującego z tablicą dwuwymiarową 314
  • 9.3 Gdzie w pamięci jest dany element tablicy 316
  • 9.4 Typ wyrażeń związanych z tablicą wielowymiarową 316
  • 9.5 Przesyłanie tablic wielowymiarowych do funkcji 318
  • 9.6 Ćwiczenia 320

10 Wektory wielowymiarowe 322

  • 10.1 Najpierw przypomnienie istotnych tu cech klasy vector 322
  • 10.2 Jak za pomoca klasy vector budować tablice wielowymiarowe 323
  • 10.3 Funkcja pokazująca zawartość wektora dwuwymiarowego 324
  • 10.4 Definicja dwuwymiarowego wektora - pustego 326
  • 10.5 Definicja wektora dwuwymiarowego z listą inicjalizatorów 327
  • 10.6 Wektor dwuwymiarowy o żądanych rozmiarach, choć bez inicjalizacji 328
  • 10.7 Zmiana rozmiaru wektora 2D funkcją resize 329
  • 10.8 Zmiany rozmiaru wektora 2D funkcjami push_back, pop_back 330
  • 10.9 Zmniejszanie rozmiaru wektora dwuwymiarowego funkcją pop_back 333
  • 10.10 Funkcje mogące modyfikować treść wektora 2D 333
  • 10.11 Wysłanie rzędu wektora 2D do funkcji pracującej z wektorem 1D 335
  • 10.12 Całośc przykładu definiującego wektory dwuwymiarowe 336
  • 10.13 Po co są dwuwymiarowe wektory nieprostokątne 336
  • 10.14 Wektory trójwymiarowe 338
  • 10.15 Sposoby definicji wektora 3D o ustalonych rozmiarach 341
  • 10.16 Nadawanie pustemu wektorowi 3D wymaganych rozmiarów 345
    • 10.16.1 Zmiana rozmiarów wektora 3D funkcjami resize 345
    • 10.16.2 Zmiana rozmiarów wektora 3D funkcjami push_back 347
  • 10.17 Trójwymiarowe wektory 3D - nieprostopadłościenne 348
  • 10.18 Ćwiczenia 352

11 Wskaźniki - wiadomości wstępne 354

  • 11.1 Wskaźniki mogą bardzo ułatwić życie 354
  • 11.2 Definiowanie wskaźników 356
  • 11.3 Praca ze wskaźnikiem 357
  • 11.4 Definiowanie wskaźnika z użyciem auto 360
  • 11.5 Wyrażenie *wskaźnik jest l-wartością 361
  • 11.6 Operator rzutowania reinterpret_cast a wskaźniki 361
  • 11.7 Wskaźniki typu void* 364
  • 11.8 Strzał na oślep - wskaźnik zawsze na coś wskazuje 366
    • 11.8.1 Wskaźnik wolno porównać z adresem zero - nullptr 368
  • 11.9 Ćwiczenia 368

12 Cztery domeny zastosowania wskaźników 370

  • 12.1 Zastosowanie wskaźników wobec tablic 370
    • 12.1.1 Ćwiczenia z mechaniki ruchu wskaźnika 370
    • 12.1.2 Użycie wskaźnika w pracy z tablicą 374
    • 12.1.3 Arytmetyka wskaźników 378
    • 12.1.4 Porównywanie wskaźników 380
  • 12.2 Zastosowanie wskaźników w argumentach funkcji 381
    • 12.2.1 Jeszcze raz o przesyłaniu tablic do funkcji 385
    • 12.2.2 Odbieranie tablicy jako wskaźnika 385
    • 12.2.3 Argument formalny będący wskaźnikiem do obiektu const 387
  • 12.3 Zastosowanie wskaźników przy dostępie do konkretnych komórek pamięci 390
  • 12.4 Rezerwacja obszarów pamięci 391
    • 12.4.1 Operatory new i delete albo Oratorium Stworzenie Świata 392
    • 12.4.2 Operator new a słowo kluczowe auto 396
    • 12.4.3 Inicjalizacja obiektu tworzonego operatorem new 396
    • 12.4.4 Operatorem new możemy także tworzyć obiekty stałe 397
    • 12.4.5 Dynamiczna alokacja tablicy 398
    • 12.4.6 Tablice wielowymiarowe tworzone operatorem new 399
    • 12.4.7 Umiejscawiający operator new 402
    • 12.4.8 "Przychodzimy, odchodzimy - cichuteńko, na..." 407
    • 12.4.9 Zapas pamięci to nie studnia bez dna 409
    • 12.4.10 Nowy sposób powiadomienia: rzucenie wyjątku std::bad_alloc 410
    • 12.4.11 Funkcja set_new_handler 412
  • 12.5 Ćwiczenia 414

13 Wskaźniki - runda trzecia 418

  • 13.1 Stałe wskaźniki 418
  • 13.2 Stałe wskaźniki a wskaźniki do stałych 419
    • 13.2.1 Wierzch i głębia 420
  • 13.3 Definiowanie wskaźnika z użyciem auto 421
    • 13.3.1 Symbol zastępczy auto a opuszczanie gwiazdki przy definiowaniu wskaźnika 424
  • 13.4 Sposoby ustawiania wskaźników 426
  • 13.5 Parada kłamców, czyli o rzutowaniu const_cast 428
  • 13.6 Tablice wskaźników 432
  • 13.7 Wariacje na temat C-stringów 434
  • 13.8 Argumenty z linii wywołania programu 441
  • 13.9 Ćwiczenia 444

14 Wskaźniki do funkcji 446

  • 14.1 Wskaźnik, który może wskazywać na funkcję 446
  • 14.2 Ćwiczenia z definiowania wskaźników do funkcji 449
  • 14.3 Wskaźnik do funkcji jako argument innej funkcji 455
  • 14.4 Tablica wskaźników do funkcji 459
  • 14.5 Użycie deklaracji using i typedef w świecie wskaźników 464
    • 14.5.1 Alias przydatny w argumencie funkcji 464
    • 14.5.2 Alias przydatny w definicji tablicy wskaźników do funkcji 465
  • 14.6 Użycie auto lub decltype do automatycznego rozpoznania potrzebnego typu 466
  • 14.7 Ćwiczenia 468

15 Przeładowanie nazwy funkcji 470

  • 15.1 Co oznacza przeładowanie 470
  • 15.2 Przeładowanie od kuchni 473
  • 15.3 Jak możemy przeładowywać, a jak się nie da? 473
  • 15.4 Czy przeładowanie nazw funkcji jest techniką orientowaną obiektowo? 476
  • 15.5 Linkowanie z modułami z innych języków 477
  • 15.6 Przeładowanie a zakres ważności deklaracji funkcji 478
  • 15.7 Rozważania o identyczności lub odmienności typów argumentów 480
    • 15.7.1 Przeładowanie a typy tworzone z using lub typedef oraz typy enum 481
    • 15.7.2 Tablica a wskaźnik 481
    • 15.7.3 Pewne szczegóły o tablicach wielowymiarowych 482
    • 15.7.4 Przeładowanie a referencja 484
    • 15.7.5 Identyczność typów: T, const T, volatile T 485
    • 15.7.6 Przeładowanie a typy: T*, volatile T*, const T* 486
    • 15.7.7 Przeładowanie a typy: T&, volatile T&, const T& 487
  • 15.8 Adres funkcji przeładowanej 488
    • 15.8.1 Zwrot rezultatu będącego adresem funkcji przeładowanej 490
  • 15.9 Kulisy dopasowywania argumentów do funkcji przeładowanych 492
  • 15.10 Etapy dopasowania 493
    • 15.10.1 Etap 1. Dopasowanie dokładne, bo konwersja niepotrzebna 493
    • 15.10.2 Etap 1a. Dopasowanie dokładne, bo z tzw. trywialną konwersją 494
    • 15.10.3 Etap 2. Dopasowanie z awansem (z promocją) 495
    • 15.10.4 Etap 3. Próba dopasowania za pomocą konwersji standardowych 497
    • 15.10.5 Etap 4. Dopasowanie z użyciem konwersji zdefiniowanych przez użytkownika 499
    • 15.10.6 Etap 5. Dopasowanie do funkcji z wielokropkiem 499
  • 15.11 Wskaźników nie dopasowuje się inaczej niż dosłownie 499
  • 15.12 Dopasowywanie wywołań z kilkoma argumentami 500
  • 15.13 Ćwiczenia 501

16 Klasy 504

  • 16.1 Typy definiowane przez użytkownika 504
  • 16.2 Składniki klasy 506
  • 16.3 Składnik będący obiektem 507
  • 16.4 Kapsułowanie 508
  • 16.5 Ukrywanie informacji 509
  • 16.6 Klasa a obiekt 512
  • 16.7 Wartości wstępne w składnikach nowych obiektów. Inicjalizacja "w klasie" 514
  • 16.8 Funkcje składowe 517
    • 16.8.1 Posługiwanie się funkcjami składowymi 517
    • 16.8.2 Definiowanie funkcji składowych 518
  • 16.9 Jak to właściwie jest? (this) 523
  • 16.10 Odwołanie się do publicznych danych składowych obiektu 525
  • 16.11 Zasłanianie nazw 526
    • 16.11.1 Nie sięgaj z klasy do obiektów globalnych 529
  • 16.12 Przeładowanie i zasłonięcie równocześnie 530
  • 16.13 Nowa klasa? Osobny plik! 530
    • 16.13.1 Poznajmy praktyczną realizację wieloplikowego programu 533
    • 16.13.2 Zasada umieszczania dyrektywy using namespace w plikach 545
  • 16.14 Przesyłanie do funkcji argumentów będących obiektami 545
    • 16.14.1 Przesyłanie obiektu przez wartość 545
    • 16.14.2 Przesyłanie przez referencję 547
  • 16.15 Konstruktor - pierwsza wzmianka 548
  • 16.16 Destruktor - pierwsza wzmianka 553
  • 16.17 Składnik statyczny 557
    • 16.17.1 Do czego może się przydać składnik statyczny w klasie? 566
  • 16.18 Statyczna funkcja składowa 566
    • 16.18.1 Deklaracja składnika statycznego mająca inicjalizację "w klasie" 571
  • 16.19 Funkcje składowe typu const oraz volatile 577
    • 16.19.1 Przeładowanie a funkcje składowe const i volatile 581
  • 16.20 Struktura 581
  • 16.21 Klasa będąca agregatem. Klasa bez konstruktora 582
  • 16.22 Funkcje składowe z przydomkiem constexpr 584
  • 16.23 Specyfikator mutable 591
  • 16.24 Bardziej rozbudowany przykład zastosowania klasy 592
  • 16.25 Ćwiczenia 603

17 Biblioteczna klasa std::string 609

  • 17.1 Rozwiązanie przechowywania tekstów musiało się znaleźć 609
  • 17.2 Klasa std::string to przecież nasz stary znajomy 611
  • 17.3 Definiowanie obiektów klasy string 612
  • 17.4 Użycie operatorów =, +, += w pracy ze stringami 617
  • 17.5 Pojemność, rozmiar i długość stringu 618
    • 17.5.1 Bliźniacze funkcje size() i length() 618
    • 17.5.2 Funkcja składowa empty 619
    • 17.5.3 Funkcja składowa max_size 619
    • 17.5.4 Funkcja składowa capacity 619
    • 17.5.5 Funkcje składowe reserve i shrink_to_fit 621
    • 17.5.6 resize - zmiana długości stringu "na siłę" 622
    • 17.5.7 Funkcja składowa clear 624
  • 17.6 Użycie operatora [ \ oraz funkcji at 624
    • 17.6.1 Działanie operatora [ \ 625
    • 17.6.2 Działanie funkcji składowej at 626
    • 17.6.3 Przebieganie po wszystkich literach stringu zakresowym for 629
  • 17.7 Funkcje składowe front i back 629
  • 17.8 Jak umieścić w tekście liczbę? 630
  • 17.9 Jak wczytać liczbę ze stringu? 632
  • 17.10 Praca z fragmentem stringu, czyli z substringiem 635
  • 17.11 Funkcja składowa substr 636
  • 17.12 Szukanie zadanego substringu w obiekcie klasy string - funkcje find 637
  • 17.13 Szukanie rozpoczynane od końca stringu 640
  • 17.14 Szukanie w stringu jednego ze znaków z zadanego zestawu 641
  • 17.15 Usuwanie znaków ze stringu - erase i pop_back 643
  • 17.16 Wstawianie znaków do istniejącego stringu - funkcje insert 644
  • 17.17 Zamiana części znaków na inne znaki - replace 646
  • 17.18 Zaglądanie do wnętrza obiektu klasy string funkcją data 649
  • 17.19 Zawartość obiektu klasy string a C-string 650
  • 17.20 W porządku alfabetycznym, czyli porównywanie stringów 653
    • 17.20.1 Porównywanie stringów za pomocą funkcji compare 654
    • 17.20.2 Porównywanie stringów przy użyciu operatorów ==, !=, <, >, <=, >= 658
  • 17.21 Zamiana treści stringu na małe lub wielkie litery 659
  • 17.22 Kopiowanie treści obiektu klasy string do tablicy znakowej - funkcja copy 661
  • 17.23 Wzajemna zamiana treści dwóch obiektów klasy string - funkcja swap 662
  • 17.24 Wczytywanie z klawiatury stringu o nieznanej wcześniej długości - getline 663
    • 17.24.1 Pułapka, czyli jak getline może Cię zaskoczyć 666
  • 17.25 Iteratory stringu 670
    • 17.25.1 Iterator do obiektu stałego 674
    • 17.25.2 Funkcje składowe klasy string pracujące z iteratorami 675
  • 17.26 Klasa string korzysta z techniki przenoszenia 680
  • 17.27 Bryk, czyli "pamięć zewnętrzna" programisty 681
  • 17.28 Ćwiczenia 689

18 Deklaracje przyjaźni 696

  • 18.1 Przyjaciele w życiu i w C++ 696
  • 18.2 Przykład: dwie klasy deklarują przyjaźń z tą samą funkcją 698
  • 18.3 W przyjaźni trzeba pamiętać o kilku sprawach 700
  • 18.4 Obdarzenie przyjaźnią funkcji składowej innej klasy 703
  • 18.5 Klasy zaprzyjaźnione 705
  • 18.6 Konwencja umieszczania deklaracji przyjaźni w klasie 707
  • 18.7 Kilka otrzeźwiających słów na zakończenie 707
  • 18.8 Ćwiczenia 708

19 Obsługa sytuacji wyjątkowych 710

  • 19.1 Jak dać znać, że coś się nie udało? 710
  • 19.2 Pierwszy prosty przykład 712
  • 19.3 Kolejność bloków catch ma znaczenie 714
  • 19.4 Który blok catch nadaje się do złapania lecącego wyjątku? 715
  • 19.5 Bloki try mogą być zagnieżdżane 717
  • 19.6 Obsługa wyjątków w praktycznym programie 720
  • 19.7 Specyfikator noexcept i operator noexcept 731
  • 19.8 Ćwiczenia 734

20 Klasa-składnik oraz klasa lokalna 736

  • 20.1 Klasa-składnik, czyli gdy w klasie jest zagnieżdżona definicja innej klasy 736
  • 20.2 Prawdziwy przykład zagnieżdżenia definicji klasy 743
  • 20.3 Lokalna definicja klasy 754
  • 20.4 Lokalne nazwy typów 757
  • 20.5 Ćwiczenia 758

21 Konstruktory i destruktory 760

  • 21.1 Konstruktor 760
    • 21.1.1 Przykład programu zawierającego klasę z konstruktorami 761
  • 21.2 Specyfikator (przydomek) explicit 772
  • 21.3 Kiedy i jak wywoływany jest konstruktor 773
    • 21.3.1 Konstruowanie obiektów lokalnych 773
    • 21.3.2 Konstruowanie obiektów globalnych 774
    • 21.3.3 Konstrukcja obiektów tworzonych operatorem new 774
    • 21.3.4 Jawne wywołanie konstruktora 775
    • 21.3.5 Dalsze sytuacje, gdy pracuje konstruktor 778
  • 21.4 Destruktor 778
    • 21.4.1 Jawne wywołanie destruktora (ogromnie rzadka sytuacja) 780
  • 21.5 Nie rzucajcie wyjątków z destruktorów 780
  • 21.6 Konstruktor domniemany 782
  • 21.7 Funkcje składowe z przypiskami = default i = delete 783
  • 21.8 Konstruktorowa lista inicjalizacyjna składników klasy 785
    • 21.8.1 Dla wtajemniczonych: wyjątki rzucane z konstruktorowej listy inicjalizacyjnej 792
  • 21.9 Konstruktor delegujący 796
  • 21.10 Pomocnicza klasa std::initializer_list - lista inicjalizatorów 803
    • 21.10.1 Zastosowania niekonstruktorowe 803
    • 21.10.2 Konfuzja: lista inicjalizatorów a lista inicjalizacyjna 812
    • 21.10.3 Konstruktor z argumentem będącym klamrową listą inicjalizatorów 813
  • 21.11 Konstrukcja obiektu, którego składnikiem jest obiekt innej klasy 818
  • 21.12 Konstruktory niepubliczne? 825
  • 21.13 Konstruktory constexpr mogą wytwarzać obiekty constexpr 827
  • 21.14 Ćwiczenia 837

22 Konstruktory: kopiujący i przenoszący 840

  • 22.1 Konstruktor kopiujący (albo inicjalizator kopiujący) 840
  • 22.2 Przykład klasy z konstruktorem kopiującym 841
  • 22.3 Kompilatorowi wolno pominąć niepotrzebne kopiowanie 846
  • 22.4 Dlaczego przez referencję? 848
  • 22.5 Konstruktor kopiujący gwarantujący nietykalność 849
  • 22.6 Współodpowiedzialność 850
  • 22.7 Konstruktor kopiujący generowany automatycznie 850
  • 22.8 Kiedy powinniśmy sami zdefiniować konstruktor kopiujący? 851
  • 22.9 Referencja do r-wartości daje zezwolenie na recykling 858
  • 22.10 Funkcja std::move, która nie przenosi, a tylko rzutuje 861
  • 22.11 Odebrana r-wartość staje się w ciele funkcji l-wartością 863
  • 22.12 Konstruktor przenoszący (inicjalizator przenoszący) 865
    • 22.12.1 Konstruktor przenoszący generowany przez kompilator 870
    • 22.12.2 Inne konstruktory generowane automatycznie 870
    • 22.12.3 Zwrot obiektu lokalnego przez wartość? Nie używamy przenoszenia! 871
  • 22.13 Tak zwana "semantyka przenoszenia" 872
  • 22.14 Nowe pojęcia dla ambitnych: gl-wartość, x-wartość i pr-wartość 872
  • 22.15 decltype - operator rozpoznawania typu bardzo wyszukanych wyrażeń 875
  • 22.16 Ćwiczenia 880

23 Tablice obiektów 882

  • 23.1 Definiowanie tablic obiektów i praca z nimi 882
  • 23.2 Tablica obiektów definiowana operatorem new 883
  • 23.3 Inicjalizacja tablic obiektów 885
    • 23.3.1 Inicjalizacja tablicy, której obiekty są agregatami 885
    • 23.3.2 Inicjalizacja tablic, których elementy nie są agregatami 888
  • 23.4 Wektory obiektów 892
    • 23.4.1 Wektor, którego elementami są obiekty klasy bedącej agregatem 894
    • 23.4.2 Wektor, którego elementami są obiekty klasy niebędącej agregatem 896
  • 23.5 Ćwiczenia 897

24 Wskaźnik do składników klasy 898

  • 24.1 Wskaźniki zwykłe - repetytorium 898
  • 24.2 Wskaźnik do pokazywania na składnik-daną 899
    • 24.2.1 Przykład zastosowania wskaźników do składników klasy 903
  • 24.3 Wskaźnik do funkcji składowej 910
    • 24.3.1 Przykład zastosowania wskaźników do funkcji składowych 912
  • 24.4 Tablica wskaźników do danych składowych klasy 919
  • 24.5 Tablica wskaźników do funkcji składowych klasy 920
    • 24.5.1 Przykład tablicy/wektora wskaźników do funkcji składowych 921
  • 24.6 Wskaźniki do składników statycznych są zwykłe 924
  • 24.7 Ćwiczenia 925

25 Konwersje definiowane przez użytkownika 927

  • 25.1 Sformułowanie problemu 927
  • 25.2 Konstruktory konwertujące 929
    • 25.2.1 Kiedy jawnie, kiedy niejawnie 930
    • 25.2.2 Przykład konwersji konstruktorem 935
  • 25.3 Funkcja konwertująca - operator konwersji 937
    • 25.3.1 Na co funkcja konwertująca zamieniać nie może 943
  • 25.4 Który wariant konwersji wybrać? 944
  • 25.5 Sytuacje, w których zachodzi konwersja 946
  • 25.6 Zapis jawnego wywołania konwersji typów 947
    • 25.6.1 Advocatus zapisu przypominającego: "wywołanie funkcji" 947
    • 25.6.2 Advocatus zapisu: "rzutowanie" 948
  • 25.7 Nie całkiem pasujące argumenty, czyli konwersje kompilatora przy dopasowaniu 948
  • 25.8 Kilka rad dotyczących konwersji 953
  • 25.9 Ćwiczenia 954

26 Przeładowanie operatorów 956

  • 26.1 Co to znaczy przeładować operator? 956
  • 26.2 Przeładowanie operatorów - definicja i trochę teorii 958
  • 26.3 Moje zabawki 962
  • 26.4 Funkcja operatorowa jako funkcja składowa 963
  • 26.5 Funkcja operatorowa nie musi być przyjacielem klasy 966
  • 26.6 Operatory predefiniowane 966
  • 26.7 Ile operandów ma mieć ten operator? 967
  • 26.8 Operatory jednooperandowe 967
  • 26.9 Operatory dwuoperandowe 970
    • 26.9.1 Przykład na przeładowanie operatora dwuoperandowego 970
    • 26.9.2 Przemienność 972
    • 26.9.3 Choć operatory inne, to nazwę mają tę samą 973
  • 26.10 Przykład zupełnie niematematyczny 973
  • 26.11 Operatory postinkrementacji i postdekrementacji - koniec z niesprawiedliwością...
Kategoria: Programowanie
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-289-1813-9
Rozmiar pliku: 44 MB

BESTSELLERY

Kategorie: