Facebook - konwersja

Język C++. Kompendium wiedzy. Wydanie 4 - ebook

Wydawnictwo:
Tłumacz:
Format:
MOBI
Data wydania:
14 lipca 2014
199,00
19900 pkt
punktów Virtualo

Język C++. Kompendium wiedzy. Wydanie 4 - ebook

Twój przewodnik po C++!

C++ dzielnie broni swojej pozycji na rynku języków programowania. Pomimo silnego naporu języka Java oraz platformy .NET wciąż jest niezastąpiony w wielu dziedzinach. Jeżeli tylko wymagana jest najwyższa wydajność, dostęp do sprzętu oraz przewidywalny czas wykonania, programiści najczęściej wybierają właśnie język C++. Ostatnia wersja standardu - oznaczona numerem 11 - pozwala na jeszcze łatwiejsze pisanie kodu oraz tworzenie szybszych i wydajniejszych programów.

Najnowsze wydanie tej cenionej książki zostało poprawione i uzupełnione o nowości z tej właśnie wersji standardu języka C++. Dowiesz się, jak korzystać ze wskaźników, liczb losowych oraz udoskonalonych kontenerów. Ponadto poznasz najlepsze zastosowanie wyrażeń lambda czy szablonów. Oprócz omówienia nowości znajdziesz tu również szczegółowy przegląd klasycznych elementów języka C++. Pętle, zmienne, tablice, instrukcje warunkowe - to tylko niektóre z omawianych zagadnień. Książka stanowi doskonały podręcznik dla początkujących programistów i świetne rozwinięcie dla programujących w języku C++ na co dzień. Przekonaj się, jak łatwo i przyjemnie możesz opanować ten popularny język oprogramowania.

Dzięki tej książce:

  • poznasz nowości wprowadzone w C++ 11
  • zaznajomisz się z elementami biblioteki standardowej
  • opanujesz podstawowy model pamięci języka C++
  • zrozumiesz model pamięci języka C++

Poznaj nowości C++ 11!

  • podstawowe narzędzia, np. typy, obiekty, zakresy, pamięć, wykonywanie obliczeń i wiele więcej
  • modularność oparta na przestrzeniach nazw, plikach źródłowych oraz obsłudze wyjątków
  • abstrakcja w C++, tj. wykorzystanie klas, hierarchii klas oraz szablonów w programowaniu tradycyjnym, obiektowym oraz ogólnym
  • biblioteka standardowa: kontenery, algorytmy, iteratory, narzędzia dodatkowe, łańcuchy, strumienia wejścia i wyjścia, lokacje, biblioteki liczbowe i wiele więcej
  • szczegółowy opis podstawowego modelu pamięci języka C++

Czwarte wydanie książki pozwala na łatwe przejście na C++11 programistom, którzy do tej pory programowali przy użyciu C++98 lub w innych językach. Ponadto w książce znajduje się wiele cennych informacji nawet dla znawców standardu C++11.

Spis treści

Przedmowa 23

Przedmowa do wydania trzeciego 27

Przedmowa do wydania drugiego 29

Przedmowa do wydania pierwszego 31

CZĘŚĆ I. WPROWADZENIE 33

Rozdział 1. Uwagi do czytelnika 35

  • 1.1. Struktura książki 35
    • 1.1.1. Wprowadzenie 36
    • 1.1.2. Podstawowe narzędzia 36
    • 1.1.3. Techniki abstrakcji 37
    • 1.1.4. Biblioteka standardowa 39
    • 1.1.5. Przykłady i odwołania 40
  • 1.2. Projekt języka C++ 41
    • 1.2.1. Styl programowania 43
    • 1.2.2. Kontrola typów 46
    • 1.2.3. Zgodność z językiem C 47
    • 1.2.4. Język, biblioteki i systemy 48
  • 1.3. Nauka języka C++ 50
    • 1.3.1. Programowanie w języku C++ 52
    • 1.3.2. Rady dla programistów C++ 53
    • 1.3.3. Rady dla programistów C 53
    • 1.3.4. Rady dla programistów języka Java 54
  • 1.4. Historia 55
    • 1.4.1. Oś czasu 56
    • 1.4.2. Pierwsze lata 57
    • 1.4.3. Standard z 1998 r. 59
    • 1.4.4. Standard z 2011 r. 62
    • 1.4.5. Do czego jest używany język C++ 65
  • 1.5. Rady 67
  • 1.6. Literatura 68

Rozdział 2. Kurs języka C++. Podstawy 73

  • 2.1. Wprowadzenie 73
  • 2.2. Podstawy 74
    • 2.2.1. Witaj, świecie! 75
    • 2.2.2. Typy, zmienne i arytmetyka 76
    • 2.2.3. Stałe 78
    • 2.2.4. Testy i pętle 79
    • 2.2.5. Wskaźniki, tablice i pętle 80
  • 2.3. Typy zdefiniowane przez użytkownika 82
    • 2.3.1. Struktury 83
    • 2.3.2. Klasy 84
    • 2.3.3. Wyliczenia 86
  • 2.4. Modułowość 87
    • 2.4.1. Osobna kompilacja 88
    • 2.4.2. Przestrzenie nazw 89
    • 2.4.3. Obsługa błędów 90
  • 2.5. Posłowie 93
  • 2.6. Rady 93

Rozdział 3. Kurs języka C++. Techniki abstrakcji 95

  • 3.1. Wprowadzenie 95
  • 3.2. Klasy 96
    • 3.2.1. Typy konkretne 96
    • 3.2.2. Typy abstrakcyjne 101
    • 3.2.3. Funkcje wirtualne 103
    • 3.2.4. Hierarchie klas 104
  • 3.3. Kopiowanie i przenoszenie 108
    • 3.3.1. Kopiowanie kontenerów 108
    • 3.3.2. Przenoszenie kontenerów 110
    • 3.3.3. Zarządzanie zasobami 112
    • 3.3.4. Tłumienie operacji 113
  • 3.4. Szablony 113
    • 3.4.1. Typy parametryzowane 114
    • 3.4.2. Szablony funkcji 115
    • 3.4.3. Obiekty funkcyjne 116
    • 3.4.4. Zmienne szablony 118
    • 3.4.5. Aliasy 119
  • 3.5. Rady 120

Rozdział 4. Kurs języka C++. Kontenery i algorytmy 121

  • 4.1. Biblioteki 121
    • 4.1.1. Przegląd biblioteki standardowej 122
    • 4.1.2. Nagłówki i przestrzeń nazw biblioteki standardowej 123
  • 4.2. Łańcuchy 124
  • 4.3. Strumienie wejścia i wyjścia 126
    • 4.3.1. Wyjście 126
    • 4.3.2. Wejście 127
    • 4.3.3. Wejście i wyjście typów zdefiniowanych przez użytkownika 128
  • 4.4. Kontenery 129
    • 4.4.1. vector 130
    • 4.4.2. list 133
    • 4.4.3. map 134
    • 4.4.4. unordered_map 135
    • 4.4.5. Przegląd kontenerów 135
  • 4.5. Algorytmy 137
    • 4.5.1. Używanie iteratorów 138
    • 4.5.2. Typy iteratorów 140
    • 4.5.3. Iteratory strumieni 140
    • 4.5.4. Predykaty 142
    • 4.3.3. Przegląd algorytmów 143
    • 4.5.6. Algorytmy kontenerowe 143
  • 4.6. Rady 144

Rozdział 5. Kurs języka C++. Współbieżność i narzędzia 145

  • 5.1. Wprowadzenie 145
  • 5.2. Zarządzanie zasobami 146
    • 5.2.1. unique_ptr i shared_ptr 146
  • 5.3. Współbieżność 148
    • 5.3.1. Zadania i wątki 149
    • 5.3.2. Przekazywanie argumentów 150
    • 5.3.3. Zwracanie wyników 150
    • 5.3.4. Wspólne używanie danych 151
    • 5.3.5. Komunikacja między zadaniami 154
  • 5.4. Drobne, ale przydatne narzędzia 157
    • 5.4.1. Czas 157
    • 5.4.2. Funkcje typowe 158
    • 5.4.3. pair i tuple 160
  • 5.5. Wyrażenia regularne 161
  • 5.6. Matematyka 162
    • 5.6.1. Funkcje i algorytmy matematyczne 162
    • 5.6.2. Liczby zespolone 163
    • 5.6.3. Liczby losowe 163
    • 5.6.4. Arytmetyka wektorów 165
    • 5.6.5. Limity liczbowe 165
  • 5.7. Rady 166

CZĘŚĆ II. PODSTAWOWE NARZĘDZIA 167

Rozdział 6. Typy i deklaracje 169

  • 6.1. Standard ISO języka C++ 169
    • 6.1.1. Implementacje 171
    • 6.1.2. Podstawowy źródłowy zestaw znaków 171
  • 6.2. Typy 172
    • 6.2.1. Typy podstawowe 172
    • 6.2.2. Typ logiczny 173
    • 6.2.3. Typy znakowe 174
    • 6.2.4. Typy całkowitoliczbowe 179
    • 6.2.5. Typy zmiennoprzecinkowe 181
    • 6.2.6. Przedrostki i przyrostki 182
    • 6.2.7. void 183
    • 6.2.8. Rozmiary 183
    • 6.2.9. Wyrównanie 185
  • 6.3. Deklaracje 186
    • 6.3.1. Struktura deklaracji 188
    • 6.3.2. Deklarowanie po kilka nazw 189
    • 6.3.3. Nazwy 189
    • 6.3.4. Zakres dostępności 191
    • 6.3.5. Inicjacja 194
    • 6.3.6. Dedukowanie typu: auto i decltype() 197
  • 6.4. Obiekty i wartości 200
    • 6.4.1. Wartości lewo- i prawostronne 200
    • 6.4.2. Cykl istnienia obiektów 201
  • 6.5. Aliasy typów 202
  • 6.6. Rady 203

Rozdział 7. Wskaźniki, tablice i referencje 205

  • 7.1. Wprowadzenie 205
  • 7.2. Wskaźniki 205
    • 7.2.1. void* 206
    • 7.2.2. nullptr 207
  • 7.3. Tablice 208
    • 7.3.1. Inicjatory tablic 209
    • 7.3.2. Literały łańcuchowe 210
  • 7.4. Wskaźniki do tablic 213
    • 7.4.1. Przeglądanie tablic 214
    • 7.4.2. Tablice wielowymiarowe 217
    • 7.4.3. Przekazywanie tablic 217
  • 7.5. Wskaźniki i const 220
  • 7.6. Wskaźniki i własność 221
  • 7.7. Referencje 222
    • 7.7.1. Referencje lewostronne 224
    • 7.7.2. Referencje prawostronne 227
    • 7.7.3. Referencje do referencji 229
    • 7.7.4. Wskaźniki i referencje 230
  • 7.8. Rady 232

Rozdział 8. Struktury, unie i wyliczenia 233

  • 8.1. Wprowadzenie 233
  • 8.2. Struktury 234
    • 8.2.1. Układ struktur 235
    • 8.2.2. Nazwy struktur 236
    • 8.2.3. Struktury a klasy 237
    • 8.2.4. Struktury a tablice 239
    • 8.2.5. Ekwiwalencja typów 241
    • 8.2.6. Stare zwykłe dane 241
    • 8.2.7. Pola 244
  • 8.3. Unie 244
    • 8.3.1. Unie a klasy 246
    • 8.3.2. Anonimowe unie 247
  • 8.4. Wyliczenia 249
    • 8.4.1. Klasy wyliczeniowe 250
    • 8.4.2. Zwykłe wyliczenia 253
    • 8.4.3. Wyliczenia anonimowe 254
  • 8.5. Rady 255

Rozdział 9. Instrukcje 257

  • 9.1. Wprowadzenie 257
  • 9.2. Zestawienie instrukcji 258
  • 9.3. Deklaracje jako instrukcje 259
  • 9.4. Instrukcje wyboru 260
    • 9.4.1. Instrukcje if 260
    • 9.4.2. Instrukcje switch 261
    • 9.4.3. Deklaracje w warunkach 264
  • 9.5. Instrukcje iteracyjne 264
    • 9.5.1. Zakresowe instrukcje for 265
    • 9.5.2. Instrukcje for 266
    • 9.5.3. Instrukcje while 267
    • 9.5.4. Instrukcje do 267
    • 9.5.5. Kończenie pętli 268
  • 9.6. Instrukcje goto 269
  • 9.7. Komentarze i wcięcia 269
  • 9.8. Rady 271

Rozdział 10. Wyrażenia 273

  • 10.1. Wprowadzenie 273
  • 10.2. Kalkulator 273
    • 10.2.1. Parser 274
    • 10.2.2. Wejście 278
    • 10.2.3. Wejście niskopoziomowe 282
    • 10.2.4. Obsługa błędów 283
    • 10.2.5. Sterownik 284
    • 10.2.6. Nagłówki 284
    • 10.2.7. Argumenty wiersza poleceń 285
    • 10.2.8. Uwaga na temat stylu 286
  • 10.3. Zestawienie operatorów 287
    • 10.3.1. Wyniki 291
    • 10.3.2. Kolejność wykonywania działań 292
    • 10.3.3. Priorytety operatorów 292
    • 10.3.4. Obiekty tymczasowe 293
  • 10.4. Wyrażenia stałe 295
    • 10.4.1. Stałe symboliczne 297
    • 10.4.2. const w wyrażeniach stałych 297
    • 10.4.3. Typy literałowe 297
    • 10.4.4. Argumenty referencyjne 298
    • 10.4.5. Wyrażenia stałe adresowe 299
  • 10.5. Niejawna konwersja typów 299
    • 10.5.1. Promocje 300
    • 10.5.2. Konwersje 300
    • 10.5.3. Typowe konwersje arytmetyczne 303
  • 10.6. Rady 304

Rozdział 11. Operacje wyboru 305

  • 11.1. Różne operatory 305
    • 11.1.1. Operatory logiczne 305
    • 11.1.2. Bitowe operatory logiczne 306
    • 11.1.3. Wyrażenia warunkowe 307
    • 11.1.4. Inkrementacja i dekrementacja 307
  • 11.2. Pamięć wolna 309
    • 11.2.1. Zarządzanie pamięcią 311
    • 11.2.2. Tablice 313
    • 11.2.3. Sprawdzanie dostępności miejsca w pamięci 314
    • 11.2.4. Przeciążanie operatora new 315
  • 11.3. Listy 318
    • 11.3.1. Model implementacji 318
    • 11.3.2. Listy kwalifikowane 319
    • 11.3.3. Listy niekwalifikowane 320
  • 11.4. Wyrażenia lambda 322
    • 11.4.1. Model implementacji 322
    • 11.4.2. Alternatywy dla lambd 323
    • 11.4.3. Lista zmiennych 325
    • 11.4.4. Wywoływanie i zwracanie wartości 329
    • 11.4.5. Typ lambdy 329
  • 11.5. Jawna konwersja typów 330
    • 11.5.1. Konstrukcja 331
    • 11.5.2. Rzutowania nazwane 333
    • 11.5.3. Rzutowanie w stylu języka C 334
    • 11.5.4. Rzutowanie w stylu funkcyjnym 335
  • 11.6. Rady 335

Rozdział 12. Funkcje 337

  • 12.1. Deklarowanie funkcji 337
    • 12.1.1. Dlaczego funkcje 338
    • 12.1.2. Składniki deklaracji funkcji 338
    • 12.1.3. Definiowanie funkcji 339
    • 12.1.4. Zwracanie wartości 340
    • 12.1.5. Funkcje inline 342
    • 12.1.6. Funkcje constexpr 343
    • 12.1.7. Funkcje [[noreturn\ 346
    • 12.1.8. Zmienne lokalne 346
  • 12.2. Przekazywanie argumentów 347
    • 12.2.1. Argumenty referencyjne 348
    • 12.2.2. Argumenty tablicowe 350
    • 12.2.4. Nieokreślona liczba argumentów 353
    • 12.2.5. Argumenty domyślne 356
  • 12.3. Przeciążanie funkcji 358
    • 12.3.1. Automatyczne wybieranie przeciążonych funkcji 358
    • 12.3.2. Przeciążanie a typ zwrotny 360
    • 12.3.3. Przeciążanie a zakres 360
    • 12.3.4. Wybieranie przeciążonych funkcji z wieloma argumentami 361
    • 12.3.5. Ręczne wybieranie przeciążonej funkcji 362
  • 12.4. Warunki wstępne i końcowe 362
  • 12.5. Wskaźnik do funkcji 364
  • 12.6. Makra 368
    • 12.6.1. Kompilacja warunkowa 370
    • 12.6.2. Makra predefiniowane 371
    • 12.6.3. Pragmy 372
  • 12.7. Rady 372

Rozdział 13. Obsługa wyjątków 373

  • 13.1. Obsługa błędów 373
    • 13.1.1. Wyjątki 374
    • 13.1.2. Tradycyjna obsługa błędów 376
    • 13.1.3. Niedbała obsługa błędów 377
    • 13.1.4. Alternatywne spojrzenie na wyjątki 378
    • 13.1.5. Kiedy nie można używać wyjątków 379
    • 13.1.6. Hierarchiczna obsługa błędów 380
    • 13.1.7. Wyjątki a wydajność 381
  • 13.2. Gwarancje wyjątków 383
  • 13.3. Zarządzanie zasobami 385
    • 13.3.1. Finalizacja 388
  • 13.4. Egzekwowanie przestrzegania niezmienników 389
  • 13.5. Zgłaszanie i przechwytywanie wyjątków 394
    • 13.5.1. Zgłaszanie wyjątków 394
    • 13.5.2. Przechwytywanie wyjątków 397
    • 13.5.3. Wyjątki a wątki 404
  • 13.6. Implementacja wektora 405
    • 13.6.1. Prosty wektor 405
    • 13.6.2. Jawna reprezentacja pamięci 409
    • 13.6.3. Przypisywanie 411
    • 13.6.4. Zmienianie rozmiaru 414
  • 13.7. Rady 416

Rozdział 14. Przestrzenie nazw 419

  • 14.1. Kwestie dotyczące kompozycji 419
  • 14.2. Przestrzenie nazw 420
    • 14.2.1. Bezpośrednia kwalifikacja 422
    • 14.2.2. Deklaracje using 423
    • 14.2.3. Dyrektywy using 424
    • 14.2.4. Wyszukiwanie wg argumentów 425
    • 14.2.5. Przestrzenie nazw są otwarte 427
  • 14.3. Modularyzacja i interfejsy 428
    • 14.3.1. Przestrzenie nazw i moduły 430
    • 14.3.2. Implementacje 431
    • 14.3.3. Interfejsy i implementacje 433
  • 14.4. Składanie przy użyciu przestrzeni nazw 435
    • 14.4.1. Wygoda a bezpieczeństwo 435
    • 14.4.2. Aliasy przestrzeni nazw 436
    • 14.4.3. Składanie przestrzeni nazw 436
    • 14.4.4. Składanie i wybieranie 438
    • 14.4.5. Przestrzenie nazw a przeciążanie 439
    • 14.4.6. Wersjonowanie 441
    • 14.4.7. Zagnieżdżanie przestrzeni nazw 443
    • 14.4.8. Anonimowe przestrzenie nazw 444
    • 14.4.9. Nagłówki języka C 444
  • 14.5. Rady 445

Rozdział 15. Pliki źródłowe i programy 447

  • 15.1. Rozdzielna kompilacja 447
  • 15.2. Konsolidacja 448
    • 15.2.1. Nazwy lokalne w plikach 451
    • 15.2.2. Pliki nagłówkowe 451
    • 15.2.3. Reguła jednej definicji 453
    • 15.2.4. Nagłówki z biblioteki standardowej 455
    • 15.2.5. Konsolidacja z kodem w innym języku 456
    • 15.2.6. Konsolidacja a wskaźniki do funkcji 458
  • 15.3. Używanie plików nagłówkowych 459
    • 15.3.1. Organizacja z jednym nagłówkiem 459
    • 15.3.2. Organizacja z wieloma nagłówkami 463
    • 15.3.3. Strażnicy dołączania 467
  • 15.4. Programy 468
    • 15.4.1. Inicjacja zmiennych nielokalnych 469
    • 15.4.2. Inicjacja i współbieżność 470
    • 15.4.3. Zamykanie programu 470
  • 15.5. Rady 472

CZĘŚĆ III. TECHNIKI ABSTRAKCJI 473

Rozdział 16. Klasy 475

  • 16.1. Wprowadzenie 475
  • 16.2. Podstawowe wiadomości o klasach 476
    • 16.2.1. Funkcje składowe 477
    • 16.2.2. Kopiowanie domyślne 478
    • 16.2.3. Kontrola dostępu 479
    • 16.2.4. Klasy i struktury 480
    • 16.2.5. Konstruktory 481
    • 16.2.6. Konstruktory explicit 483
    • 16.2.7. Inicjatory wewnątrzklasowe 485
    • 16.2.8. Wewnątrzklasowe definicje funkcji 486
    • 16.2.9. Zmienność 487
    • 16.2.10. Słowo kluczowe this 490
    • 16.2.11. Dostęp do składowych 491
    • 16.2.12. Składowe statyczne 492
    • 16.2.13. Typy składowe 494
  • 16.3. Klasy konkretne 495
    • 16.3.1. Funkcje składowe 498
    • 16.3.2. Funkcje pomocnicze 500
    • 16.3.3. Przeciążanie operatorów 502
    • 16.3.4. Znaczenie klas konkretnych 503
  • 16.4. Rady 504

Rozdział 17. Tworzenie, kasowanie, kopiowanie i przenoszenie 505

  • 17.1. Wprowadzenie 505
  • 17.2. Konstruktory i destruktory 507
    • 17.2.1. Konstruktory i niezmienniki 508
    • 17.2.2. Destruktory i zasoby 509
    • 17.2.3. Destruktory klas bazowych i składowych klas 510
    • 17.2.4. Wywoływanie konstruktorów i destruktorów 511
    • 17.2.5. Destruktory wirtualne 512
  • 17.3. Inicjacja obiektów klas 513
    • 17.3.1. Inicjacja bez konstruktorów 513
    • 17.3.2. Inicjacja przy użyciu konstruktorów 515
    • 17.3.3. Konstruktory domyślne 517
    • 17.3.4. Konstruktory z listą inicjacyjną 519
  • 17.4. Inicjacja składowych i bazy 524
    • 17.4.1. Inicjacja składowych 524
    • 17.4.2. Inicjatory bazy 525
    • 17.4.3. Delegowanie konstruktorów 526
    • 17.4.4. Inicjatory wewnątrzklasowe 527
    • 17.4.5. Inicjacja składowych statycznych 529
  • 17.5. Kopiowanie i przenoszenie 530
    • 17.5.1. Kopiowanie 530
    • 17.5.2. Przenoszenie 537
  • 17.6. Generowanie domyślnych operacji 541
    • 17.6.1. Jawne operacje domyślne 541
    • 17.6.2. Operacje domyślne 542
    • 17.6.3. Używanie operacji domyślnych 543
    • 17.6.4. Usuwanie funkcji 547
  • 17.7. Rady 548

Rozdział 18. Przeciążanie operatorów 551

  • 18.1. Wprowadzenie 551
  • 18.2. Funkcje operatorowe 553
    • 18.2.1. Operatory dwu- i jednoargumentowe 554
    • 18.2.2. Predefiniowane znaczenie operatorów 555
    • 18.2.3. Operatory i typy zdefiniowane przez użytkownika 555
    • 18.2.4. Przekazywanie obiektów 556
    • 18.2.5. Operatory w przestrzeniach nazw 557
  • 18.3. Typ reprezentujący liczby zespolone 559
    • 18.3.1. Operatory składowe i zewnętrzne 559
    • 18.3.2. Arytmetyka mieszana 560
    • 18.3.3. Konwersje 561
    • 18.3.4. Literały 564
    • 18.3.5. Funkcje dostępowe 565
    • 18.3.6. Funkcje pomocnicze 565
  • 18.4. Konwersja typów 567
    • 18.4.1. Operatory konwersji 567
    • 18.4.2. Operatory konwersji explicit 569
    • 18.4.3. Niejednoznaczności 569
  • 18.5. Rady 571

Rozdział 19. Operatory specjalne 573

  • 19.1. Wprowadzenie 573
  • 19.2. Operatory specjalne 573
    • 19.2.1. Indeksowanie 573
    • 19.2.2. Wywoływanie funkcji 574
    • 19.2.3. Dereferencja 576
    • 19.2.4. Inkrementacja i dekrementacja 578
    • 19.2.5. Alokacja i dezalokacja 580
    • 19.2.6. Literały zdefiniowane przez użytkownika 581
  • 19.3. Klasa String 584
    • 19.3.1. Podstawowe operacje 585
    • 19.3.2. Dostęp do znaków 585
    • 19.3.3. Reprezentacja 586
    • 19.3.4. Funkcje składowe 589
    • 19.3.5. Funkcje pomocnicze 591
    • 19.3.6. Sposoby użycia 593
  • 19.4. Przyjaciele 594
    • 19.4.1. Znajdowanie przyjaciół 596
    • 19.4.2. Przyjaciele i składowe 597
  • 19.5. Rady 598

Rozdział 20. Derywacja klas 599

  • 20.1. Wprowadzenie 599
  • 20.2. Klasy pochodne 600
    • 20.2.1. Funkcje składowe 602
    • 20.2.2. Konstruktory i destruktory 604
  • 20.3. Hierarchie klas 604
    • 20.3.1. Pola typów 605
    • 20.3.2. Funkcje wirtualne 607
    • 20.3.3. Bezpośrednia kwalifikacja 610
    • 20.3.4. Kontrola przesłaniania 610
    • 20.3.5. Używanie składowych klasy bazowej 614
    • 20.3.6. Rozluźnienie zasady dotyczącej typów zwrotnych 617
  • 20.4. Klasy abstrakcyjne 619
  • 20.5. Kontrola dostępu 621
    • 20.5.1. Składowe chronione 624
    • 20.5.2. Dostęp do klas bazowych 625
    • 20.5.3. Deklaracje using i kontrola dostępu 627
  • 20.6. Wskaźniki do składowych 627
    • 20.6.1. Wskaźniki do funkcji składowych 628
    • 20.6.2. Wskaźniki do danych składowych 630
    • 20.6.3. Składowe bazy i klasy pochodnej 631
  • 20.7. Rady 631

Rozdział 21. Hierarchie klas 633

  • 21.1. Wprowadzenie 633
  • 21.2. Projektowanie hierarchii klas 633
    • 21.2.1. Dziedziczenie implementacji 634
    • 21.2.2. Dziedziczenie interfejsu 637
    • 21.2.3. Alternatywne implementacje 639
    • 21.2.4. Lokalizowanie tworzenia obiektu 642
  • 21.3. Wielodziedziczenie 644
    • 21.3.1. Wiele interfejsów 644
    • 21.3.2. Wiele klas implementacyjnych 644
    • 21.3.3. Rozstrzyganie niejednoznaczności 646
    • 21.3.4. Wielokrotne użycie klasy bazowej 649
    • 21.3.5. Wirtualne klasy bazowe 651
    • 21.3.6. Bazy wirtualne a replikowane 655
  • 21.4. Rady 658

Rozdział 22. Informacje o typach w czasie działania programu 659

  • 22.1. Wprowadzenie 659
  • 22.2. Poruszanie się w obrębie hierarchii klas 660
    • 22.2.1. Rzutowanie dynamiczne 661
    • 22.2.2. Wielodziedziczenie 664
    • 22.2.3. Rzutowanie statyczne i dynamiczne 665
    • 22.2.4. Odzyskiwanie interfejsu 667
  • 22.3. Podwójny polimorfizm i wizytatorzy 670
    • 22.3.1. Podwójny polimorfizm 671
    • 22.3.2. Wizytatorzy 673
  • 22.4. Konstrukcja i destrukcja 675
  • 22.5. Identyfikacja typów 675
    • 22.5.1. Rozszerzone informacje o typie 677
  • 22.6. Poprawne i niepoprawne używanie RTTI 678
  • 22.7. Rady 680

Rozdział 23. Szablony 681

  • 23.1. Wprowadzenie i przegląd 681
  • 23.2. Prosty szablon łańcucha 684
    • 23.2.1. Definiowanie szablonu 685
    • 23.2.2. Konkretyzacja szablonu 687
  • 23.3. Kontrola typów 688
    • 23.3.1. Ekwiwalencja typów 689
    • 23.3.2. Wykrywanie błędów 690
  • 23.4. Składowe szablonu klasy 691
    • 23.4.1. Dane składowe 691
    • 23.4.2. Funkcje składowe 692
    • 23.4.3. Aliasy typów składowych 692
    • 23.4.4. Składowe statyczne 692
    • 23.4.5. Typy składowe 693
    • 23.4.6. Szablony składowe 694
    • 23.4.7. Przyjaciele 698
  • 23.5. Szablony funkcji 699
    • 23.5.1. Argumenty szablonu funkcji 701
    • 23.5.2. Dedukcja argumentów szablonu funkcji 702
    • 23.5.3. Przeciążanie szablonów funkcji 704
  • 23.6. Aliasy szablonów 708
  • 23.7. Organizacja kodu źródłowego 709
    • 23.7.1. Konsolidacja 711
  • 23.8. Rady 712

Rozdział 24. Programowanie ogólne 713

  • 24.1. Wprowadzenie 713
  • 24.2. Algorytmy i uogólnianie 714
  • 24.3. Koncepcje 718
    • 24.3.1. Odkrywanie koncepcji 718
    • 24.3.2. Koncepcje i ograniczenia 722
  • 24.4. Konkretyzacja koncepcji 724
    • 24.4.1. Aksjomaty 727
    • 24.4.2. Koncepcje wieloargumentowe 728
    • 24.4.3. Koncepcje wartości 729
    • 24.4.4. Sprawdzanie ograniczeń 730
    • 24.4.5. Sprawdzanie definicji szablonu 731
  • 24.5. Rady 733

Rozdział 25. Specjalizacja 735

  • 25.1. Wprowadzenie 735
  • 25.2. Argumenty i parametry szablonu 736
    • 25.2.1. Typy jako argumenty 736
    • 25.2.2. Wartości jako argumenty 738
    • 25.2.3. Operacje jako argumenty 739
    • 25.2.4. Szablony jako argumenty 742
    • 25.2.5. Domyślne argumenty szablonów 742
  • 25.3. Specjalizacja 744
    • 25.3.1. Specjalizacja interfejsu 747
    • 25.3.2. Szablon podstawowy 748
    • 25.3.3. Porządek specjalizacji 750
    • 25.3.4. Specjalizacja szablonu funkcji 750
  • 25.4. Rady 753

Rozdział 26. Konkretyzacja 755

  • 26.1. Wprowadzenie 755
  • 26.2. Konkretyzacja szablonu 756
    • 26.2.1. Kiedy konkretyzacja jest potrzebna 757
    • 26.2.2. Ręczne sterowanie konkretyzacją 758
  • 26.3. Wiązanie nazw 759
    • 26.3.1. Nazwy zależne 761
    • 26.3.2. Wiązanie w miejscu definicji 762
    • 26.3.3. Wiązanie w miejscu konkretyzacji 763
    • 26.3.4. Wiele miejsc konkretyzacji 766
    • 26.3.5. Szablony i przestrzenie nazw 767
    • 26.3.6. Nadmiernie agresywne wyszukiwanie wg argumentów 768
    • 26.3.7. Nazwy z klas bazowych 770
  • 26.4. Rady...
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-283-8330-2
Rozmiar pliku: 6,0 MB

BESTSELLERY

Menu

Zamknij