JĘZYK C++ KOMPENDIUM WIEDZY WYD. IV

134.10

Na stanie

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.5.5. 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 (334)
  • 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.3. Argumenty listowe (351)
    • 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 (413)
  • 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 (772)

Rozdział 27. Hierarchie szablonów (773)

  • 27.1. Wprowadzenie (773)
  • 27.2. Parametryzacja i hierarchia (774)
    • 27.2.1. Typy generowane (776)
    • 27.2.2. Konwersje szablonów (778)
  • 27.3. Hierarchie szablonów klas (779)
    • 27.3.1. Szablony jako interfejsy (780)
  • 27.4. Parametry szablonowe jako klasy bazowe (781)
    • 27.4.1. Składanie struktur danych (781)
    • 27.4.2. Linearyzacja hierarchii klas (785)
  • 27.5. Rady (790)

Rozdział 28. Metaprogramowanie (791)

  • 28.1. Wprowadzenie (791)
  • 28.2. Funkcje typowe (794)
    • 28.2.1. Aliasy typów (796)
    • 28.2.2. Predykaty typów (798)
    • 28.2.3. Wybieranie funkcji (799)
    • 28.2.4. Cechy (800)
  • 28.3. Struktury sterujące (802)
    • 28.3.1. Wybieranie (802)
    • 28.3.2. Iteracja i rekurencja (805)
    • 28.3.3. Kiedy stosować metaprogramowanie (806)
  • 28.4. Definicja warunkowa (807)
    • 28.4.1. Używanie Enable_if (809)
    • 28.4.2. Implementacja Enable_if (811)
    • 28.4.3. Enable_if i koncepcje (811)
    • 28.4.4. Dodatkowe przykłady użycia Enable_if (812)
  • 28.5. Lista czasu kompilacji (814)
    • 28.5.1. Prosta funkcja wyjściowa (816)
    • 28.5.2. Dostęp do elementów (818)
    • 28.5.3. make_tuple (820)
  • 28.6. Szablony zmienne (821)
    • 28.6.1. Bezpieczna typowo funkcja printf() (821)
    • 28.6.2. Szczegóły techniczne (824)
    • 28.6.3. Przekazywanie (825)
    • 28.6.4. Typ tuple z biblioteki standardowej (827)
  • 28.7. Przykład z jednostkami układu SI (830)
    • 28.7.1. Jednostki (830)
    • 28.7.2. Wielkości (831)
    • 28.7.3. Literały jednostkowe (833)
    • 28.7.4. Funkcje pomocnicze (834)
  • 28.8. Rady (836)

Rozdział 29. Projekt macierzy (837)

  • 29.1. Wprowadzenie (837)
    • 29.1.1. Podstawowe zastosowania macierzy (838)
    • 29.1.2. Wymagania dotyczące macierzy (840)
  • 29.2. Szablon macierzy (841)
    • 29.2.1. Konstrukcja i przypisywanie (842)
    • 29.2.2. Indeksowanie i cięcie (843)
  • 29.3. Operacje arytmetyczne na macierzach (845)
    • 29.3.1. Operacje skalarne (846)
    • 29.3.2. Dodawanie (847)
    • 29.3.3. Mnożenie (848)
  • 29.4. Implementacja macierzy (850)
    • 29.4.1. Wycinki (850)
    • 29.4.2. Wycinki macierzy (850)
    • 29.4.3. Matrix_ref (852)
    • 29.4.4. Inicjacja listy macierzy (853)
    • 29.4.5. Dostęp do macierzy (855)
    • 29.4.6. Macierz zerowymiarowa (857)
  • 29.5. Rozwiązywanie równań liniowych (858)
    • 29.5.1. Klasyczna eliminacja Gaussa (859)
    • 29.5.2. Znajdowanie elementu centralnego (860)
    • 29.5.3. Testowanie (861)
    • 29.5.4. Połączone operacje (862)
  • 29.6. Rady (864)

CZĘŚĆ IV. BIBLIOTEKA STANDARDOWA (865)

Rozdział 30. Przegląd zawartości biblioteki standardowej (867)

  • 30.1. Wprowadzenie (867)
    • 30.1.1. Narzędzia biblioteki standardowej (868)
    • 30.1.2. Kryteria projektowe (869)
    • 30.1.3. Styl opisu (870)
  • 30.2. Nagłówki (871)
  • 30.3. Wsparcie dla języka (875)
    • 30.3.1. Wsparcie dla list inicjacyjnych (876)
    • 30.3.2. Wsparcie dla zakresowej pętli for (876)
  • 30.4. Obsługa błędów (877)
    • 30.4.1. Wyjątki (877)
    • 30.4.2. Asercje (882)
    • 30.4.3. system_error (882)
  • 30.5. Rady (892)

Rozdział 31. Kontenery STL (893)

  • 31.1. Wprowadzenie (893)
  • 31.2. Przegląd kontenerów (893)
    • 31.2.1. Reprezentacja kontenera (896)
    • 31.2.2. Wymagania dotyczące elementów (898)
  • 31.3. Przegląd operacji (901)
    • 31.3.1. Typy składowe (904)
    • 31.3.2. Konstruktory, destruktory i przypisania (904)
    • 31.3.3. Rozmiar i pojemność (906)
    • 31.3.4. Iteratory (907)
    • 31.3.5. Dostęp do elementów (908)
    • 31.3.6. Operacje stosowe (908)
    • 31.3.7. Operacje listowe (909)
    • 31.3.8. Inne operacje (910)
  • 31.4. Kontenery (910)
    • 31.4.1. vector (911)
    • 31.4.2. Listy (915)
    • 31.4.3. Kontenery asocjacyjne (917)
  • 31.5. Adaptacje kontenerów (929)
    • 31.5.1. Stos (929)
    • 31.5.2. Kolejka (931)
    • 31.5.3. Kolejka priorytetowa (931)
  • 31.6. Rady (932)

Rozdział 32. Algorytmy STL (935)

  • 32.1. Wprowadzenie (935)
  • 32.2. Algorytmy (935)
    • 32.2.1. Sekwencje (936)
  • 32.3. Argumenty zasad (938)
    • 32.3.1. Złożoność (939)
  • 32.4. Algorytmy nie modyfikujące sekwencji (940)
    • 32.4.1. for_each() (940)
    • 32.4.2. Predykaty sekwencji (940)
    • 32.4.3. count() (940)
    • 32.4.4. find() (941)
    • 32.4.5. equal() i mismatch() (942)
    • 32.4.6. search() (942)
  • 32.5. Algorytmy modyfikujące sekwencje (943)
    • 32.5.1. copy() (944)
    • 32.5.2. unique() (945)
    • 32.5.3. remove() i replace() (946)
    • 32.5.4. rotate(), random_shuffle() oraz partition() (947)
    • 32.5.5. Permutacje (948)
    • 32.5.6. fill() (948)
    • 32.5.7. swap() (949)
  • 32.6. Sortowanie i wyszukiwanie (950)
    • 32.6.1. Wyszukiwanie binarne (952)
    • 32.6.2. merge() (954)
    • 32.6.3. Algorytmy działające na zbiorach (954)
    • 32.6.4. Sterty (955)
    • 32.6.5. lexicographical_compare() (956)
  • 32.7. Element minimalny i maksymalny (957)
  • 32.8. Rady (958)

Rozdział 33. Iteratory STL (959)

  • 33.1. Wprowadzenie (959)
    • 33.1.1. Model iteratorów (959)
    • 33.1.2. Kategorie iteratorów (961)
    • 33.1.3. Cechy iteratorów (962)
    • 33.1.4. Operacje iteratorów (964)
  • 33.2. Adaptacje iteratorów (965)
    • 33.2.1. Iterator odwrotny (966)
    • 33.2.2. Iteratory wstawiające (968)
    • 33.2.3. Iteratory przenoszące (969)
  • 33.3. Zakresowe funkcje dostępowe (970)
  • 33.4. Obiekty funkcyjne (971)
  • 33.5. Adaptacje funkcji (972)
    • 33.5.1. bind() (972)
    • 33.5.2. mem_fn() (974)
    • 33.5.3. function (974)
  • 33.6. Rady (976)

Rozdział 34. Pamięć i zasoby (977)

  • 34.1. Wprowadzenie (977)
  • 34.2. „Prawie kontenery” (977)
    • 34.2.1. array (978)
    • 34.2.2. bitset (981)
    • 34.2.3. vector (985)
    • 34.2.4. Krotki (986)
  • 34.3. Wskaźniki do zarządzania pamięcią (990)
    • 34.3.1. unique_ptr (990)
    • 34.3.2. shared_ptr (993)
    • 34.3.3. weak_ptr (996)
  • 34.4. Alokatory (998)
    • 34.4.1. Alokator domyślny (1000)
    • 34.4.2. Cechy alokatorów (1001)
    • 34.4.3. Cechy wskaźników (1002)
    • 34.4.4. Alokatory zakresowe (1003)
  • 34.5. Interfejs odśmiecacza (1004)
  • 34.6. Pamięć niezainicjowana (1007)
    • 34.6.1. Bufory tymczasowe (1007)
    • 34.6.2. raw_storage_iterator (1008)
  • 34.7. Rady (1009)

Rozdział 35. Narzędzia pomocnicze (1011)

  • 35.1. Wprowadzenie (1011)
  • 35.2. Czas (1011)
    • 35.2.1. duration (1012)
    • 35.2.2. time_point (1015)
    • 35.2.3. Zegary (1017)
    • 35.2.4. Cechy czasu (1018)
  • 35.3. Działania arytmetyczne na liczbach wymiernych w czasie kompilacji (1019)
  • 35.4. Funkcje typowe (1020)
    • 35.4.1. Cechy typów (1020)
    • 35.4.2. Generatory typów (1025)
  • 35.5. Drobne narzędzia (1030)
    • 35.5.1. move() i forward() (1030)
    • 35.5.2. swap() (1031)
    • 35.5.3. Operatory relacyjne (1031)
    • 35.5.4. Porównywanie i mieszanie type_info (1032)
  • 35.6. Rady (1033)

Rozdział 36. Łańcuchy (1035)

  • 36.1. Wprowadzenie (1035)
  • 36.2. Klasyfikacja znaków (1035)
    • 36.2.1. Funkcje klasyfikacji (1035)
    • 36.2.2. Cechy znaków (1036)
  • 36.3. Łańcuchy (1038)
    • 36.3.1. Typ string a łańcuchy w stylu C (1039)
    • 36.3.2. Konstruktory (1040)
    • 36.3.3. Operacje podstawowe (1042)
    • 36.3.4. Łańcuchowe wejście i wyjście (1044)
    • 36.3.5. Konwersje numeryczne (1044)
    • 36.3.6. Operacje w stylu biblioteki STL (1046)
    • 36.3.7. Rodzina funkcji find (1048)
    • 36.3.8. Podłańcuchy (1049)
  • 36.4. Rady (1050)

Rozdział 37. Wyrażenia regularne (1053)

  • 37.1. Wyrażenia regularne (1053)
    • 37.1.1. Notacja wyrażeń regularnych (1054)
  • 37.2. regex (1059)
    • 37.2.1. Wyniki dopasowywania (1061)
    • 37.2.2. Formatowanie (1063)
  • 37.3. Funkcje wyrażeń regularnych (1064)
    • 37.3.1. regex_match() (1064)
    • 37.3.2. regex_search() (1066)
    • 37.3.3. regex_replace() (1067)
  • 37.4. Iteratory wyrażeń regularnych (1068)
    • 37.4.1. regex_iterator (1068)
    • 37.4.2. regex_token_iterator (1070)
  • 37.5. regex_traits (1072)
  • 37.6. Rady (1073)

Rozdział 38. Strumienie wejścia i wyjścia (1075)

  • 38.1. Wprowadzenie (1075)
  • 38.2. Hierarchia strumieni wejścia i wyjścia (1077)
    • 38.2.1. Strumienie plikowe (1078)
    • 38.2.2. Strumienie łańcuchowe (1079)
  • 38.3. Obsługa błędów (1081)
  • 38.4. Operacje wejścia i wyjścia (1082)
    • 38.4.1. Operacje wejściowe (1083)
    • 38.4.2. Operacje wyjściowe (1086)
    • 38.4.3. Manipulatory (1088)
    • 38.4.4. Stan strumienia (1089)
    • 38.4.5. Formatowanie (1094)
  • 38.5. Iteratory strumieniowe (1101)
  • 38.6. Buforowanie (1102)
    • 38.6.1. Strumienie wyjściowe i bufory (1105)
    • 38.6.2. Strumienie wejściowe i bufory (1106)
    • 38.6.3. Iteratory buforów (1107)
  • 38.7. Rady (1109)

Rozdział 39. Lokalizacje (1111)

  • 39.1. Różnice kulturowe (1111)
  • 39.2. Klasa locale (1114)
    • 39.2.1. Lokalizacje nazwane (1116)
    • 39.2.2. Porównywanie łańcuchów (1120)
  • 39.3. Klasa facet (1120)
    • 39.3.1. Dostęp do faset w lokalizacji (1121)
    • 39.3.2. Definiowanie prostej fasety (1122)
    • 39.3.3. Zastosowania lokalizacji i faset (1125)
  • 39.4. Standardowe fasety (1125)
    • 39.4.1. Porównywanie łańcuchów (1127)
    • 39.4.2. Formatowanie liczb (1131)
    • 39.4.3. Formatowanie kwot pieniężnych (1136)
    • 39.4.4. Formatowanie daty i godziny (1141)
    • 39.4.5. Klasyfikacja znaków (1144)
    • 39.4.6. Konwersja kodów znaków (1147)
    • 39.4.7. Wiadomości (1151)
  • 39.5. Interfejsy pomocnicze (1155)
    • 39.5.1. Klasyfikacja znaków (1155)
    • 39.5.2. Konwersje znaków (1156)
    • 39.5.3. Konwersje łańcuchów (1156)
    • 39.5.4. Buforowanie konwersji (1157)
  • 39.6. Rady (1158)

Rozdział 40. Liczby (1159)

  • 40.1. Wprowadzenie (1159)
  • 40.2. Granice liczbowe (1160)
    • 40.2.1. Makra ograniczające (1162)
  • 40.3. Standardowe funkcje matematyczne (1163)
  • 40.4. Liczby zespolone (1164)
  • 40.5. Tablica numeryczna valarray (1166)
    • 40.5.1. Konstruktory i przypisania (1166)
    • 40.5.2. Indeksowanie (1168)
    • 40.5.3. Operacje (1169)
    • 40.5.4. Wycinki (1172)
    • 40.5.5. slice_array (1174)
    • 40.5.6. Uogólnione wycinki (1175)
  • 40.6. Uogólnione algorytmy numeryczne (1176)
    • 40.6.1. Algorytm accumulate() (1177)
    • 40.6.2. Algorytm inner_product() (1177)
    • 40.6.3. Algorytmy partial_sum() i adjacent_difference() (1178)
    • 40.6.4. Algorytm iota() (1179)
  • 40.7. Liczby losowe (1180)
    • 40.7.1. Mechanizmy (1182)
    • 40.7.2. Urządzenie losowe (1184)
    • 40.7.3. Rozkłady (1185)
    • 40.7.4. Losowanie liczb w stylu C (1189)
  • 40.8. Rady (1189)

Rozdział 41. Współbieżność (1191)

  • 41.1. Wprowadzenie (1191)
  • 41.2. Model pamięci (1193)
    • 41.2.1. Lokalizacje pamięci (1194)
    • 41.2.2. Zmienianie kolejności instrukcji (1195)
    • 41.2.3. Porządek pamięci (1196)
    • 41.2.4. Wyścigi do danych (1197)
  • 41.3. Konstrukcje atomowe (1198)
    • 41.3.1. Typy atomowe (1201)
    • 41.3.2. Flagi i bariery (1205)
  • 41.4. Słowo kluczowe volatile (1207)
  • 41.5. Rady (1207)

Rozdział 42. Wątki i zadania (1209)

  • 42.1. Wprowadzenie (1209)
  • 42.2. Wątki (1210)
    • 42.2.1. Tożsamość (1211)
    • 42.2.2. Konstrukcja (1212)
    • 42.2.3. Destrukcja (1213)
    • 42.2.4. Funkcja join() (1214)
    • 42.2.5. Funkcja detach() (1215)
    • 42.2.6. Przestrzeń nazw this_thread (1217)
    • 42.2.7. Likwidowanie wątku (1218)
    • 42.2.8. Dane lokalne wątku (1218)
  • 42.3. Unikanie wyścigów do danych (1220)
    • 42.3.1. Muteksy (1220)
    • 42.3.2. Wiele blokad (1228)
    • 42.3.3. Funkcja call_once() (1230)
    • 42.3.4. Zmienne warunkowe (1231)
  • 42.4. Współbieżność zadaniowa (1235)
    • 42.4.1. Typy future i promise (1236)
    • 42.4.2. Typ promise (1237)
    • 42.4.3. Typ packaged_task (1238)
    • 42.4.4. Typ future (1241)
    • 42.4.5. Typ shared_future (1244)
    • 42.4.6. Funkcja async() (1245)
    • 42.4.7. Przykład równoległej funkcji find() (1247)
  • 42.5. Rady (1251)

Rozdział 43. Biblioteka standardowa C (1253)

  • 43.1. Wprowadzenie (1253)
  • 43.2. Pliki (1253)
  • 43.3. Rodzina printf() (1254)
  • 43.4. Łańcuchy w stylu C (1259)
  • 43.5. Pamięć (1260)
  • 43.6. Data i godzina (1261)
  • 43.7. Itd. (1264)
  • 43.8. Rady (1266)

Rozdział 44. Zgodność (1267)

  • 44.1. Wprowadzenie (1267)
  • 44.2. Rozszerzenia C++11 (1268)
    • 44.2.1. Narzędzia językowe (1268)
    • 44.2.2. Składniki biblioteki standardowej (1269)
    • 44.2.3. Elementy wycofywane (1270)
    • 44.2.4. Praca ze starszymi implementacjami C++ (1271)
  • 44.3. Zgodność C i C++ (1271)
    • 44.3.1. C i C++ to rodzeństwo (1271)
    • 44.3.2. „Ciche” różnice (1273)
    • 44.3.3. Kod C nie będący kodem C++ (1274)
    • 44.3.4. Kod C++ nie będący kodem C (1277)
  • 44.4. Rady (1279)

Skorowidz (1281)

Autor

ISBN

978-83-246-8530-1

Liczba stron

Rok wydania

Wydawca

Opinie

Na razie nie ma opinii o produkcie.

Napisz pierwszą opinię o „JĘZYK C++ KOMPENDIUM WIEDZY WYD. IV”

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *