C++. Zaawansowane programowanie - Helion
Tytuł oryginału: Professional C++
Tłumaczenie: Paweł Gonera, Rafał Jońca, Tomasz Żmijewski
ISBN: 83-7361-998-4
stron: 912, Format: B5, okładka: twarda
Data wydania: 2005-11-08
Księgarnia: Helion
Cena książki: 97,00 zł
Poznaj możliwości i mechanizmy C++ stosowane przez profesjonalistów
- Efektywne zarządzanie pamięcią
- Obsługa błędów
- Biblioteki i wzorce projektowe
Język C++ od dawna cieszy się zasłużoną popularnością wśród twórców oprogramowania. Jednak często nawet najbardziej doświadczeni programiści nie wykorzystują wszystkich jego możliwości. W opracowaniach dotyczących tego języka najczęściej omawiana jest składnia i elementy języka, a znacznie rzadziej -- jego praktyczne zastosowania. Brak odniesień do praktyki powoduje nieznajomość wielu niezwykle przydatnych i ułatwiających pracę aspektów C++ i nadmierne eksploatowanie prostych, książkowych konstrukcji.
Książka "C++. Zaawansowane programowanie" to przegląd metod programowania nie omawianych w większości publikacji. Ten przeznaczony dla średnio zaawansowanych programistów podręcznik przedstawia zasady stosowania C++ do rozwiązywania prawdziwych problemów. Opisuje nieznane możliwości znacznie przyspieszające i usprawniające pracę, sposoby tworzenia przenośnego kodu oraz testowania oprogramowania. Książka zawiera również omówienie biblioteki standardowej C++ oraz wzorców projektowych.
- Zasady tworzenia projektów w C++
- Projektowanie obiektowe
- Korzystanie z biblioteki standardowej C++
- Tworzenie kodu przeznaczonego do wielokrotnego zastosowania
- Styl kodowania
- Zarządzanie pamięcią
- Procedury obsługi wyjątków
- Przeciążanie operatorów
- Tworzenie aplikacji wieloplatformowych
- Testowanie kodu i usuwanie błędów
- Programowanie rozproszone
- Stosowanie wzorców projektowych
Naucz się korzystać z C++ tak, jak robią to profesjonaliści.
Spis treści
C++. Zaawansowane programowanie -- spis treści
O autorach (17)
Wprowadzenie (19)
Część I Wprowadzenie do profesjonalnego C++ (23)
Rozdział 1. Skrócony kurs C++ (25)
- Podstawy C++ (25)
- Teraz obowiązkowo Hello, World (26)
- Przestrzenie nazw (28)
- Zmienne (30)
- Operatory (32)
- Typy danych (34)
- Wyrażenia warunkowe (36)
- Pętle (38)
- Tablice (40)
- Funkcje (41)
- To był elementarz (42)
- C++ z bliska (42)
- Wskaźniki i pamięć alokowana dynamicznie (42)
- Łańcuchy znakowe w C++ (45)
- Referencje (47)
- Wyjątki (48)
- Wiele zastosowań słowa kluczowego const (49)
- C++ jako język obiektowy (50)
- Deklarowanie klasy (51)
- Nasz pierwszy praktyczny program C++ (53)
- System obsługi kadrowej (53)
- Klasa Employee (54)
- Klasa Database (58)
- Interfejs użytkownika (62)
- Udoskonalanie programu (65)
- Podsumowanie (65)
Rozdział 2. Tworzenie profesjonalnych programów w C++ (67)
- Czym jest projekt programu? (68)
- Dlaczego projekt programu jest tak ważny? (68)
- Co jest szczególnego w projektach C++? (70)
- Dwie zasady tworzenia projektów w C++ (71)
- Abstrakcja (71)
- Wielokrotne użycie (73)
- Projektowanie programu szachowego (75)
- Wymagania (75)
- Kolejne etapy projektowania (76)
- Podsumowanie (80)
Rozdział 3. Projektowanie obiektowe (83)
- Obiektowe spojrzenie na świat (83)
- Czy myślę proceduralnie? (83)
- Filozofia obiektowa (84)
- W świecie obiektów (87)
- Powiązania obiektów (89)
- Abstrakcja (99)
- Podsumowanie (102)
Rozdział 4. Użycie bibliotek i wzorców (103)
- Wielokrotne użycie kodu (103)
- Uwaga na temat terminologii (104)
- Podejmowanie decyzji, czy ponownie wykorzystać kod (105)
- Strategie wielokrotnego użycia kodu (107)
- Korzystanie z obcych aplikacji (112)
- Biblioteki open-source (113)
- Standardowa biblioteka C++ (114)
- Projektowanie z użyciem wzorców i technik (127)
- Techniki projektowe (128)
- Wzorce projektowe (129)
- Podsumowanie (130)
Rozdział 5. Projektowanie z myślą o ponownym użyciu (131)
- Filozofia wielokrotnego użycia (132)
- Jak projektować kod wielokrotnego użycia (132)
- Użycie abstrakcji (133)
- Struktura kodu wielokrotnego użycia (134)
- Projektowanie interfejsów (139)
- Łączenie ogólności i prostoty użycia (145)
- Podsumowanie (146)
Rozdział 6. Użycie metod inżynierii oprogramowania (147)
- Potrzeba stosowania procesu (147)
- Modele cyklu życia oprogramowania (149)
- Model etapowy i kaskadowy (149)
- Metoda spirali (152)
- Rational Unified Process (154)
- Metodyki inżynierii oprogramowania (155)
- Programowanie ekstremalne (XP) (156)
- Sąd nad oprogramowaniem (160)
- Tworzenie własnego procesu i metodyki (161)
- Bądź otwarty na nowe pomysły (161)
- Dziel się pomysłami (161)
- Zorientuj się, co działa, a co nie (162)
- Nie bądź renegatem (162)
- Podsumowanie (162)
Część II Profesjonalne kodowanie w C++ (163)
Rozdział 7. Styl kodowania (165)
- Piękny wygląd (165)
- Myślenie o przyszłości (165)
- Zachowanie porządku (166)
- Elementy dobrego stylu (166)
- Dokumentowanie kodu (166)
- Po co pisać komentarze (166)
- Style komentowania (169)
- Komentarze w tej książce (174)
- Dekompozycja (174)
- Dekompozycja przez refaktoring (174)
- Dekompozycja na etapie projektu (176)
- Dekompozycja w tej książce (176)
- Nazewnictwo (176)
- Dobór właściwej nazwy (177)
- Konwencje nazewnicze (177)
- Elementy języka a styl (180)
- Stałe (180)
- Korzystanie ze zmiennych const (180)
- Użycie referencji zamiast wskaźników (180)
- Wyjątki użytkownika (181)
- Formatowanie (181)
- Rozmieszczenie nawiasów klamrowych (182)
- Spacje i nawiasy (183)
- Spacje i tabulatory (183)
- Wyzwania związane ze stylem (183)
- Podsumowanie (184)
Rozdział 8. Poznajemy lepiej klasy i obiekty (185)
- Wprowadzenie do przykładu arkusza kalkulacyjnego (185)
- Pisanie klas (186)
- Definicje klasy (186)
- Definiowanie metod (188)
- Użycie obiektów (192)
- Cykl życia obiektów (193)
- Tworzenie obiektu (193)
- Usuwanie obiektu (204)
- Przypisania do obiektów (206)
- Odróżnianie kopiowania od przypisania (208)
- Podsumowanie (210)
Rozdział 9. Doskonalenie znajomości klas i obiektów (211)
- Dynamiczna alokacja pamięci w obiektach (211)
- Klasa Spreadsheet (212)
- Zwalnianie pamięci w destruktorach (213)
- Obsługa kopiowania i przypisania (214)
- Różne rodzaje pól w klasach (221)
- Pola statyczne (221)
- Pola stałe (223)
- Pola będące referencjami (225)
- Pola będące stałymi referencjami (226)
- Jeszcze o metodach (226)
- Metody statyczne (226)
- Metody stałe (227)
- Przeciążanie metod (229)
- Parametry domyślne (230)
- Metody inline (231)
- Klasy zagnieżdżone (233)
- Zaprzyjaźnienie (235)
- Przeciążanie operatorów (236)
- Implementacja dodawania (236)
- Przeciążanie operatorów arytmetycznych (240)
- Przeciążanie operatorów porównania (242)
- Tworzenie typów z przeciążaniem operatorów (244)
- Wskaźniki pól i metod (244)
- Tworzenie klas abstrakcyjnych (245)
- Użycie klas interfejsu i implementacji (246)
- Podsumowanie (249)
Rozdział 10. Przygoda z dziedziczeniem (251)
- Klasy i dziedziczenie (251)
- Rozszerzanie klas (252)
- Nadpisywanie metod (255)
- Dziedziczenie a wielokrotne użycie kodu (258)
- Klasa WeatherPrediction (258)
- Nowe możliwości w podklasie (259)
- Inne możliwości w podklasie (261)
- Szacunek dla rodziców (262)
- Konstruktory rodziców (262)
- Destruktory rodziców (264)
- Odwołania do danych rodziców (266)
- Rzutowanie w górę i w dół (267)
- Dziedziczenie i polimorfizm (268)
- Powrót do arkusza kalkulacyjnego (269)
- Polimorficzna komórka arkusza (269)
- Klasa bazowa komórki arkusza (270)
- Poszczególne podklasy (272)
- Polimorfizm dla zaawansowanych (274)
- Uwagi na przyszłość (275)
- Dziedziczenie wielokrotne (276)
- Dziedziczenie po wielu klasach (277)
- Kolizje nazw i niejednoznaczne klasy bazowe (278)
- Ciekawostki i tajemnice dziedziczenia (281)
- Zmiana charakterystyki nadpisanej metody (281)
- Przypadki szczególne nadpisywania metod (285)
- Konstruktory kopiujące i operator równości (291)
- Prawda o wirtualności (293)
- Typy podczas działania programu (296)
- Dziedziczenie niepubliczne (297)
- Wirtualne klasy bazowe (298)
- Podsumowanie (299)
Rozdział 11. Szablony i kod ogólny (301)
- Szablony w skrócie (302)
- Szablony klas (303)
- Pisanie szablonu klasy (303)
- Jak kompilator przetwarza szablony (311)
- Rozdzielanie kodu szablonu między pliki (312)
- Parametry szablonów (313)
- Szablony metod (316)
- Specjalizacja klas szablonów (321)
- Podklasy szablonów klas (324)
- Dziedziczenie a specjalizacja (325)
- Szablony funkcji (326)
- Specjalizacja szablonów funkcji (327)
- Przeciążanie szablonów funkcji (327)
- Szablony funkcji zaprzyjaźnionych szablonów klas (328)
- Szablony: zagadnienia zaawansowane (330)
- Więcej o parametrach szablonów (330)
- Częściowa specjalizacja szablonów klas (338)
- Przeciążanie jako symulacja specjalizacji częściowej funkcji (344)
- Szablony rekurencyjnie (345)
- Podsumowanie (353)
Rozdział 12. Dziwactwa C++ (355)
- Referencje (355)
- Zmienne referencyjne (356)
- Referencje do pól (358)
- Parametry referencyjne (358)
- Zwracanie wartości przez referencję (359)
- Wybór między referencjami a wskaźnikami (360)
- Zamieszanie ze słowami kluczowymi (362)
- Słowo kluczowe const (362)
- Słowo kluczowe static (365)
- Porządek inicjalizacji zmiennych nielokalnych (369)
- Typy i rzutowanie (369)
- typedef (370)
- Rzutowanie (371)
- Zasięg (375)
- Pliki nagłówkowe (376)
- Narzędzia C (377)
- Listy parametrów o zmiennej długości (378)
- Makra preprocesora (380)
- Podsumowanie (381)
Część III Zaawansowane elementy C++ (383)
Rozdział 13. Skuteczne zarządzanie pamięcią (385)
- Użycie pamięci dynamicznej (385)
- Jak sobie wyobrazić pamięć (386)
- Alokacja i zwalnianie (387)
- Tablice (389)
- Użycie wskaźników (396)
- Dualność tablic i wskaźników (398)
- Tablice są wskaźnikami! (398)
- Nie wszystkie wskaźniki są tablicami! (399)
- Łańcuchy dynamiczne (400)
- Łańcuchy w stylu C (400)
- Literały łańcuchowe (402)
- Klasa C++ string (402)
- Niskopoziomowe operacje na pamięci (404)
- Arytmetyka wskaźników (405)
- Specjalne zarządzanie pamięcią (405)
- Odśmiecanie pamięci (406)
- Pule obiektów (407)
- Wskaźniki funkcji (407)
- Typowe błędy związane z zarządzaniem pamięcią (409)
- Brak pamięci na łańcuchy (409)
- Wycieki pamięci (410)
- Dwukrotne usuwanie i błędne wskaźniki (413)
- Dostęp do pamięci spoza zakresu (414)
- Podsumowanie (414)
Rozdział 14. Wejście-wyjście w C++. Pożegnanie z mitami (415)
- Użycie strumieni (416)
- Czym jest strumień (416)
- Źródła i przeznaczenie strumieni (416)
- Strumienie wyjściowe (417)
- Strumienie wejściowe (421)
- Wejście i wyjście realizowane za pomocą obiektów (426)
- Strumienie łańcuchowe (428)
- Strumienie plikowe (429)
- Poruszanie się za pomocą seek() i tell() (430)
- Wiązanie strumieni (432)
- Wejście-wyjście dwukierunkowe (433)
- Internacjonalizacja (435)
- Znaki rozszerzone (435)
- Zestawy znaków inne niż zachodnie (436)
- Ustawienia lokalne i fazy (436)
- Podsumowanie (438)
Rozdział 15. Obsługa błędów (439)
- Błędy i wyjątki (440)
- Czym są wyjątki (440)
- Zalety wyjątków języka C++ (441)
- Wady wyjątków języka C++ (442)
- Zalecenia (442)
- Mechanika wyjątków (443)
- Zgłaszanie i wyłapywanie wyjątków (443)
- Typy wyjątków (445)
- Zgłaszanie i wyłapywanie wielu wyjątków (447)
- Niewyłapane wyjątki (449)
- Lista zgłaszanych wyjątków (451)
- Wyjątki i polimorfizm (455)
- Hierarchia standardowych wyjątków (455)
- Przechwytywanie wyjątków w hierarchii klas (456)
- Pisanie własnych klas wyjątków (458)
- Odwijanie stosu i zwalnianie zasobów (461)
- Złap wyjątek, dokonaj zwolnienia zasobu i ponownie zgłoś wyjątek (462)
- Wykorzystanie inteligentnych wskaźników (463)
- Typowe zagadnienia dotyczące obsługi błędów (463)
- Błędy alokacji pamięci (463)
- Błędy w konstruktorach (466)
- Błędy w destruktorze (467)
- Połączenie wszystkiego razem (468)
- Podsumowanie (470)
Część IV Pozbywanie się błędów (471)
Rozdział 16. Przeciążanie operatorów języka C++ (473)
- Omówienie przeciążania operatorów (474)
- Powody przeciążania operatorów (474)
- Ograniczenia przeciążania operatorów (474)
- Wybór przeciążania operatorów (475)
- Operatory, których nie należy przeciążać (478)
- Podsumowanie operatorów z możliwością przeciążania (478)
- Przeciążanie operatorów arytmetycznych (481)
- Przeciążanie jednoargumentowego operatora plus i minus (481)
- Przeciążanie inkrementacji i dekrementacji (482)
- Przeciążanie operatorów bitowych i operatorów logicznych dwuargumentowych (484)
- Przeciążanie operatorów wstawiania i wydobywania (484)
- Przeciążanie operatora indeksu tablicy (486)
- Zapewnienie dostępu tylko do odczytu dla operatora operator[] (489)
- Indeksy niebędące liczbami całkowitymi (490)
- Przeciążenie operatora wywołania funkcji (491)
- Przeciążanie operatorów dereferencji (493)
- Implementacja operatora operator* (494)
- Implementacja operatora operator-> (495)
- Co oznacza operator->*? (496)
- Pisanie operatorów konwersji (496)
- Problemy niejednoznaczności operatorów konwersji (498)
- Konwersje dla wyrażeń logicznych (498)
- Przeciążanie operatorów alokacji i zwalniania pamięci (500)
- Jak tak naprawdę działają operatory new i delete (501)
- Przeciążanie operatorów new i delete (502)
- Przeciążanie operatorów new i delete z dodatkowymi parametrami (505)
- Podsumowanie (507)
Rozdział 17. Pisanie wydajnego kodu (509)
- Omówienie wydajności i efektywności (509)
- Dwa podejścia do efektywności (510)
- Dwa rodzaje programów (510)
- Czy C++ to nieefektywny język programowania? (510)
- Efektywność na poziomie języka (511)
- Wydajna obsługa obiektów (512)
- Nie nadużywaj kosztownych elementów języka (515)
- Użycie metod i funkcji rozwijanych w miejscu wywołania (516)
- Efektywność na poziomie projektu (517)
- Stosuj buforowanie podręczne, jeśli tylko to możliwe (517)
- Pule obiektów (518)
- Wykorzystanie puli wątków (523)
- Profilowanie (524)
- Profilowanie przykładu za pomocą gprof (524)
- Podsumowanie (533)
Rozdział 18. Tworzenie aplikacji wieloplatformowych i wielojęzykowych (535)
- Tworzenie aplikacji wieloplatformowych (536)
- Kwestie architektury (536)
- Kwestie implementacji (539)
- Elementy specyficzne dla platformy programowo-sprzętowej (540)
- Aplikacje wielojęzykowe (541)
- Mieszanie języków C i C++ (541)
- Zmieszane paradygmaty (542)
- Konsolidacja kodu języka C (545)
- Łączenie Javy i C++ dzięki JNI (546)
- Mieszanie C++ z Perlem i skryptami powłoki (549)
- Mieszanie C++ z kodem w języku asemblera (552)
- Podsumowanie (552)
Rozdział 19. Podstawy testowania (553)
- Kontrola jakości (554)
- Kto jest odpowiedzialny za testowanie? (554)
- Cykl życia błędu (554)
- Narzędzia do śledzenia błędów (555)
- Testy jednostkowe (556)
- Metody testowania jednostkowego (557)
- Proces testowania jednostkowego (558)
- Testy jednostkowe w praktyce (562)
- Testowanie wyższego poziomu (570)
- Testy integracyjne (571)
- Testy systemowe (572)
- Testy regresyjne (573)
- Wskazówki na temat testowania (574)
- Podsumowanie (574)
Rozdział 20. Wszystko o debugowaniu (575)
- Podstawowe zasady debugowania (575)
- Taksonomia błędów (576)
- Unikanie błędów (576)
- Przewidywanie błędów (577)
- Rejestrowanie błędów (577)
- Rejestrowanie śladu (578)
- Asercje (589)
- Techniki debugowania (590)
- Reprodukcja błędów (591)
- Debugowanie błędów powtarzalnych (592)
- Debugowanie błędów niemożliwych do powtórzenia (592)
- Debugowanie błędów pamięci (593)
- Debugowanie programów wielowątkowych (597)
- Przykład debugowania: cytowanie artykułów (598)
- Wnioski z przykładu ArticleCitations (609)
- Podsumowanie (609)
Rozdział 21. W głąb STL: kontenery i iteratory (611)
- Przegląd kontenerów (612)
- Wymagania co do elementów (612)
- Wyjątki i kontrola błędów (614)
- Iteratory (614)
- Kontenery sekwencyjne (616)
- Wektor (616)
- Specjalizowana implementacja vector<bool> (634)
- Kontener deque (635)
- Kontener list (636)
- Adaptery kontenerów (640)
- Adapter queue (640)
- Adapter priority_queue (643)
- Adapter stack (646)
- Kontenery asocjacyjne (647)
- Klasa narzędziowa pair (647)
- Kontener map (648)
- Kontener multimap (657)
- Kontener set (661)
- Kontener multiset (663)
- Inne kontenery (663)
- Tablice jako kontenery STL (663)
- string jako kontener STL (664)
- Strumienie jako kontenery STL (665)
- Kontener bitset (665)
- Podsumowanie (670)
Część V Użycie bibliotek i wzorców (671)
Rozdział 22. Poznajemy algorytmy STL oraz obiekty funkcyjne (673)
- Przegląd algorytmów (674)
- Algorytmy find() oraz find_if() (674)
- Algorytm accumulate() (677)
- Obiekty funkcyjne (678)
- Obiekty funkcji arytmetycznych (678)
- Obiekty funkcji porównań (679)
- Obiekty funkcji logicznych (680)
- Adaptery obiektów funkcyjnych (681)
- Tworzenie własnych obiektów funkcyjnych (685)
- Szczegóły budowy algorytmów (686)
- Algorytmy użytkowe (686)
- Algorytmy niemodyfikujące (687)
- Algorytmy modyfikujące (693)
- Algorytmy sortujące (698)
- Algorytmy dla zbiorów (701)
- Przykład użycia algorytmów i obiektów funkcyjnych: kontrola list wyborców (702)
- Problem kontroli rejestrów wyborców (703)
- Funkcja auditVoterRolls() (703)
- Funkcja getDuplicates() (704)
- Funktor RemoveNames (705)
- Funktor NameInList (706)
- Testowanie funkcji auditVoterRolls() (707)
- Podsumowanie (708)
Rozdział 23. Dostosowywanie i rozszerzanie STL (709)
- Alokatory (710)
- Adaptery iteratorów (710)
- Iteratory działające wstecz (710)
- Iteratory strumienia (712)
- Iteratory wstawiające (712)
- Rozszerzanie STL (714)
- Po co rozszerzamy STL? (715)
- Tworzenie algorytmów STL (715)
- Tworzenie kontenera STL (717)
- Podsumowanie (747)
Rozdział 24. Rzecz o obiektach rozproszonych (749)
- Zalety programowania rozproszonego (749)
- Rozpraszanie w celu zwiększenia skalowalności (749)
- Rozpraszanie w celu zwiększenia niezawodności (750)
- Rozpraszanie w celu centralizacji (750)
- Rozpraszanie treści (751)
- Przetwarzanie rozproszone a sieciowe (751)
- Obiekty rozproszone (752)
- Serializacja i szeregowanie (752)
- Zdalne wywoływanie procedur (756)
- CORBA (758)
- Język definicji interfejsu (758)
- Implementacja klasy (761)
- Wykorzystanie obiektów (762)
- XML (766)
- Szybki kurs XML (766)
- XML jako technologia obiektów rozproszonych (768)
- Generowanie i analizowanie XML w C++ (769)
- Kontrola poprawności XML (777)
- Tworzenie obiektów rozproszonych z użyciem XML (779)
- SOAP (ang. Simple Object Access Protocol) (782)
- Podsumowanie (784)
Rozdział 25. Korzystanie z technik i bibliotek (785)
- Nigdy nie pamiętam, jak... (786)
- ...utworzyć klasę (786)
- ...dziedziczyć po istniejącej klasie (787)
- ...zgłosić i przechwycić wyjątek (788)
- ...odczytać z pliku (789)
- ...zapisać do pliku (789)
- ...utworzyć szablon klasy (790)
- Musi istnieć lepszy sposób (792)
- Inteligentne wskaźniki ze zliczaniem referencji (792)
- Podwójne rozsyłanie (797)
- Klasy domieszkowe (803)
- Biblioteki obiektowe (806)
- Wykorzystywanie bibliotek (806)
- Paradygmat model-widok-kontroler (807)
- Podsumowanie (808)
Rozdział 26. Wykorzystanie wzorców projektowych (809)
- Wzorzec singleton (810)
- Przykład: mechanizm dziennika (810)
- Implementacja klasy singleton (810)
- Wykorzystanie klasy singleton (815)
- Wzorzec factory (816)
- Przykład: symulacja fabryki samochodów (816)
- Implementacja klasy factory (818)
- Wykorzystanie wzorca factory (820)
- Inne zastosowania wzorca factory (822)
- Wzorzec proxy (822)
- Przykład: ukrywanie problemów z połączeniem sieciowym (822)
- Implementacja klasy proxy (823)
- Wykorzystanie klasy proxy (824)
- Wzorzec adapter (824)
- Przykład: adaptacja biblioteki XML (824)
- Implementacja adaptera (825)
- Wykorzystanie klasy adaptera (828)
- Wzorzec decorator (829)
- Przykład: definiowanie stylów na stronach WWW (829)
- Implementacja klasy decorator (830)
- Wykorzystanie klasy decorator (831)
- Wzorzec chain of responsibility (832)
- Przykład: obsługa zdarzeń (833)
- Implementacja łańcucha odpowiedzialności (833)
- Wykorzystanie łańcucha odpowiedzialności (834)
- Wzorzec observer (834)
- Przykład: obsługa zdarzeń (835)
- Implementacja wzorca observer (835)
- Wykorzystanie wzorca observer (836)
- Podsumowanie (837)
Dodatki (839)
Dodatek A Rozmowy kwalifikacyjne z C++ (841)
- Rozdział 1. "Skrócony kurs C++" (841)
- Rozdział 2. "Tworzenie profesjonalnych programów w C++" (842)
- Rozdział 3. "Projektowanie obiektowe" (843)
- Rozdział 4. "Użycie bibliotek i wzorców" (844)
- Rozdział 5. "Projektowanie z myślą o ponownym użyciu" (845)
- Rozdział 6. "Użycie metod inżynierii oprogramowania" (846)
- Rozdział 7. "Styl kodowania" (847)
- Rozdziały 8. i 9. Klasy i obiekty (848)
- Rozdział 10. "Przygoda z dziedziczeniem" (851)
- Rozdział 11. "Szablony i kod ogólny" (851)
- Rozdział 12. "Dziwactwa C++" (852)
- Rozdział 13. "Skuteczne zarządzanie pamięcią" (853)
- Rozdział 14. "Wejście-wyjście w C++. Pożegnanie z mitami" (854)
- Rozdział 15. "Obsługa błędów" (855)
- Rozdział 16. "Przeciążanie operatorów języka C++" (856)
- Rozdział 17. "Pisanie wydajnego kodu" (856)
- Rozdział 18. "Tworzenie aplikacji wieloplatformowych i wielojęzykowych" (857)
- Rozdział 19. "Podstawy testowania" (858)
- Rozdział 20. "Wszystko o debugowaniu" (859)
- Rozdziały 21., 22. i 23. Biblioteka STL (859)
- Rozdział 24. "Rzecz o obiektach rozproszonych" (860)
- Rozdział 25. "Korzystanie z technik i bibliotek" (861)
- Rozdział 26. "Wykorzystanie wzorców projektowych" (861)
Dodatek B Bibliografia z omówieniami (863)
- C++ (863)
- C++ dla początkujących (863)
- Różne informacje o C++ (864)
- Strumienie wejścia-wyjścia (865)
- Standardowa biblioteka C++ (866)
- Szablony C++ (866)
- Język C (866)
- Integracja C++ z innymi językami (867)
- Algorytmy i struktury danych (867)
- Oprogramowanie open-source (868)
- Metodologie inżynierii programowania (868)
- Styl programowania (869)
- Architektura komputerów (869)
- Wydajność (870)
- Testowanie (870)
- Debugowanie (870)
- Obiekty rozproszone (870)
- CORBA (871)
- XML oraz SOAP (871)
- Wzorce projektowe (872)
Skorowidz (873)