Programowanie. Teoria i praktyka z wykorzystaniem C++ - Helion
Tytuł oryginału: Principles and Practice Using C++
Tłumaczenie: Łukasz Piwko
ISBN: 978-83-246-2233-7
stron: 1112, Format: 172x245, okładka: twarda
Data wydania: 2010-03-26
Księgarnia: Helion
Cena książki: 129,00 zł
Zaczerpnij wiedzę o C++ od samego twórcy języka!
- Jak zacząć pracę w zintegrowanym środowisku programistycznym?
- Jak profesjonalnie tworzyć programy użytkowe?
- Jak korzystać z biblioteki graficznego interfejsu użytkownika?
Jeśli zależy Ci na tym, aby zdobyć rzetelną wiedzę i perfekcyjne umiejętności programowania z użyciem języka C++, powinieneś uczyć się od wybitnego eksperta i twórcy tego języka — Bjarne Stroustrupa, który jako pierwszy zaprojektował i zaimplementował C++. Podręcznik, który trzymasz w ręku, daje Ci szansę odkrycia wszelkich tajników tego języka, obszernie opisanego w międzynarodowym standardzie i obsługującego najważniejsze techniki programistyczne. C++ umożliwia pisanie wydajnego i eleganckiego kodu, a większość technik w nim stosowanych można przenieść do innych języków programowania.
Książka "Programowanie w C++. Teoria i praktyka" zawiera szczegółowy opis pojęć i technik programistycznych, a także samego języka C++, oraz przykłady kodu. Znajdziesz tu również omówienia zagadnień zaawansowanych, takich jak przetwarzanie tekstu i testowanie. Z tego podręcznika dowiesz się, na czym polega wywoływanie funkcji przeciążonych i dopasowywanie wyrażeń regularnych. Zobaczysz też, jaki powinien być standard kodowania. Poznasz sposoby projektowania klas graficznych i systemów wbudowanych, tajniki implementacji, wykorzystywania funkcji oraz indywidualizacji operacji wejścia i wyjścia. Korzystając z tego przewodnika, nauczysz się od samego mistrza pisać doskonałe, wydajne i łatwe w utrzymaniu programy.
- Techniki programistyczne
- Infrastruktura algorytmiczna
- Biblioteka standardowa C++
- Instrukcje sterujące i obsługa błędów
- Implementacja i wykorzystanie funkcji
- Kontrola typów
- Interfejsy klas
- Indywidualizacja operacji wejścia i wyjścia
- Projektowanie klas graficznych
- Wektory i pamięć wolna
- Kontenery i iteratory
- Programowanie systemów wbudowanych
- Makra
Wykorzystaj wiedzę Bjarne Stroustrupa i pisz profesjonalne programy w C++!
Spis treści
Programowanie. Teoria i praktyka z wykorzystaniem C++ -- spis treści
Wstęp (19)
- Słowo do studentów (21)
- Słowo do nauczycieli (22)
- Pomoc (23)
- Podziękowania (23)
Uwagi do czytelnika (25)
- 0.1. Struktura książki (26)
- 0.1.1. Informacje ogólne (27)
- 0.1.2. Ćwiczenia, praca domowa itp. (28)
- 0.1.3. Po przeczytaniu tej książki (29)
- 0.2. Filozofia nauczania i uczenia się (29)
- 0.2.1. Kolejność tematów (32)
- 0.2.2. Programowanie a język programowania (34)
- 0.2.3. Przenośność (34)
- 0.3. Programowanie a informatyka (35)
- 0.4. Kreatywność i rozwiązywanie problemów (35)
- 0.5. Uwagi dla autorów (35)
- 0.6. Bibliografia (36)
- 0.7. Noty biograficzne (37)
- Bjarne Stroustrup (37)
- Lawrence "Pete" Petersen (38)
Rozdział 1. Komputery, ludzie i programowanie (39)
- 1.1. Wstęp (40)
- 1.2. Oprogramowanie (40)
- 1.3. Ludzie (42)
- 1.4. Informatyka (45)
- 1.5. Komputery są wszędzie (46)
- 1.5.1. Komputery z ekranem i bez (46)
- 1.5.2. Transport (47)
- 1.5.3. Telekomunikacja (48)
- 1.5.4. Medycyna (50)
- 1.5.5. Informacja (51)
- 1.5.6. Sięgamy w kosmos (52)
- 1.5.7. I co z tego (53)
- 1.6. Ideały dla programistów (54)
Część I: Podstawy (61)
Rozdział 2. Witaj, świecie! (63)
- 2.1. Programy (64)
- 2.2. Klasyczny pierwszy program (64)
- 2.3. Kompilacja (67)
- 2.4. Łączenie (69)
- 2.5. Środowiska programistyczne (70)
Rozdział 3. Obiekty, typy i wartości (77)
- 3.1. Dane wejściowe (78)
- 3.2. Zmienne (80)
- 3.3. Typy danych wejściowych (81)
- 3.4. Operacje i operatory (82)
- 3.5. Przypisanie i inicjacja (85)
- 3.5.1. Przykład usuwania powtarzających się słów (87)
- 3.6. Złożone operatory przypisania (89)
- 3.6.1. Przykład zliczania powtarzających się słów (89)
- 3.7. Nazwy (90)
- 3.8. Typy i obiekty (92)
- 3.9. Kontrola typów (94)
- 3.9.1. Konwersje bezpieczne dla typów (95)
- 3.9.2. Konwersje niebezpieczne dla typów (96)
Rozdział 4. Wykonywanie obliczeń (103)
- 4.1. Wykonywanie obliczeń (104)
- 4.2. Cele i narzędzia (105)
- 4.3. Wyrażenia (107)
- 4.3.1. Wyrażenia stałe (108)
- 4.3.2. Operatory (109)
- 4.3.3. Konwersje (111)
- 4.4. Instrukcje (112)
- 4.4.1. Selekcja (113)
- 4.4.2. Iteracja (119)
- 4.5. Funkcje (122)
- 4.5.1. Po co zaprzątać sobie głowę funkcjami (124)
- 4.5.2. Deklarowanie funkcji (125)
- 4.6. Wektor (126)
- 4.6.1. Powiększanie wektora (127)
- 4.6.2. Przykład wczytywania liczb do programu (128)
- 4.6.3. Przykład z użyciem tekstu (130)
- 4.7. Właściwości języka (132)
Rozdział 5. Błędy (139)
- 5.1. Wstęp (140)
- 5.2. Źródła błędów (141)
- 5.3. Błędy kompilacji (142)
- 5.3.1. Błędy składni (142)
- 5.3.2. Błędy typów (143)
- 5.3.3. Nie błędy (144)
- 5.4. Błędy konsolidacji (145)
- 5.5. Błędy czasu wykonania (146)
- 5.5.1. Rozwiązywanie problemu przez wywołującego (147)
- 5.5.2. Rozwiązywanie problemu przez wywoływanego (148)
- 5.5.3. Raportowanie błędów (149)
- 5.6. Wyjątki (151)
- 5.6.1. Nieprawidłowe argumenty (151)
- 5.6.2. Błędy zakresu (152)
- 5.6.3. Nieprawidłowe dane wejściowe (154)
- 5.6.4. Błędy zawężania zakresu (156)
- 5.7. Błędy logiczne (157)
- 5.8. Szacowanie (159)
- 5.9. Debugowanie (161)
- 5.9.1. Praktyczna rada dotycząca debugowania (162)
- 5.10. Warunki wstępne i końcowe (165)
- 5.10.1. Warunki końcowe (167)
- 5.11. Testowanie (168)
Rozdział 6. Pisanie programu (175)
- 6.1. Problem (176)
- 6.2. Przemyślenie problemu (176)
- 6.2.1. Etapy rozwoju oprogramowania (177)
- 6.2.2. Strategia (177)
- 6.3. Wracając do kalkulatora (179)
- 6.3.1. Pierwsza próba (180)
- 6.3.2. Tokeny (182)
- 6.3.3. Implementowanie tokenów (183)
- 6.3.4. Używanie tokenów (185)
- 6.3.5. Powrót do tablicy (187)
- 6.4. Gramatyki (188)
- 6.4.1. Dygresja - gramatyka języka angielskiego (192)
- 6.4.2. Pisanie gramatyki (193)
- 6.5. Zamiana gramatyki w kod (194)
- 6.5.1. Implementowanie zasad gramatyki (194)
- 6.5.2. Wyrażenia (195)
- 6.5.3. Składniki (199)
- 6.5.4. Podstawowe elementy wyrażeń (200)
- 6.6. Wypróbowywanie pierwszej wersji (201)
- 6.7. Wypróbowywanie drugiej wersji (205)
- 6.8. Strumienie tokenów (206)
- 6.8.1. Implementacja typu Token_stream (207)
- 6.8.2. Wczytywanie tokenów (209)
- 6.8.3. Wczytywanie liczb (210)
- 6.9. Struktura programu (211)
Rozdział 7. Kończenie programu (217)
- 7.1. Wprowadzenie (218)
- 7.2. Wejście i wyjście (218)
- 7.3. Obsługa błędów (220)
- 7.4. Liczby ujemne (224)
- 7.5. Reszta z dzielenia (225)
- 7.6. Oczyszczanie kodu (227)
- 7.6.1. Stałe symboliczne (227)
- 7.6.2. Użycie funkcji (229)
- 7.6.3. Układ kodu (230)
- 7.6.4. Komentarze (231)
- 7.7. Odzyskiwanie sprawności po wystąpieniu błędu (233)
- 7.8. Zmienne (236)
- 7.8.1. Zmienne i definicje (236)
- 7.8.2. Wprowadzanie nazw (240)
- 7.8.3. Nazwy predefiniowane (242)
- 7.8.4. Czy to już koniec? (243)
Rozdział 8. Szczegóły techniczne - funkcje itp. (247)
- 8.1. Szczegóły techniczne (248)
- 8.2. Deklaracje i definicje (249)
- 8.2.1. Rodzaje deklaracji (252)
- 8.2.2. Deklaracje stałych i zmiennych (252)
- 8.2.3. Domyślna inicjacja (254)
- 8.3. Pliki nagłówkowe (254)
- 8.4. Zakres (256)
- 8.5. Wywoływanie i wartość zwrotna funkcji (261)
- 8.5.1. Deklarowanie argumentów i typu zwrotnego (261)
- 8.5.2. Zwracanie wartości (263)
- 8.5.3. Przekazywanie przez wartość (264)
- 8.5.4. Przekazywanie argumentów przez stałą referencję (265)
- 8.5.5. Przekazywanie przez referencję (267)
- 8.5.6. Przekazywanie przez wartość a przez referencję (269)
- 8.5.7. Sprawdzanie argumentów i konwersja (271)
- 8.5.8. Implementacja wywołań funkcji (272)
- 8.6. Porządek wykonywania instrukcji (276)
- 8.6.1. Wartościowanie wyrażeń (277)
- 8.6.2. Globalna inicjacja (277)
- 8.7. Przestrzenie nazw (279)
- 8.7.1. Dyrektywy i deklaracje using (280)
Rozdział 9. Szczegóły techniczne - klasy itp. (287)
- 9.1. Typy zdefiniowane przez użytkownika (288)
- 9.2. Klasy i składowe klas (289)
- 9.3. Interfejs i implementacja (289)
- 9.4. Tworzenie klas (291)
- 9.4.1. Struktury i funkcje (291)
- 9.4.2. Funkcje składowe i konstruktory (293)
- 9.4.3. Ukrywanie szczegółów (294)
- 9.4.4. Definiowanie funkcji składowych (296)
- 9.4.5. Odwoływanie się do bieżącego obiektu (298)
- 9.4.6. Raportowanie błędów (299)
- 9.5. Wyliczenia (300)
- 9.6. Przeciążanie operatorów (302)
- 9.7. Interfejsy klas (303)
- 9.7.1. Typy argumentów (304)
- 9.7.2. Kopiowanie (306)
- 9.7.3. Konstruktory domyślne (306)
- 9.7.4. Stałe funkcje składowe (309)
- 9.7.5. Składowe i funkcje pomocnicze (310)
- 9.8. Klasa Date (312)
Część II: Wejście i wyjście (319)
Rozdział 10. Strumienie wejścia i wyjścia (321)
- 10.1. Wejście i wyjście (322)
- 10.2. Model strumieni wejścia i wyjścia (323)
- 10.3. Pliki (325)
- 10.4. Otwieranie pliku (326)
- 10.5. Odczytywanie i zapisywanie plików (328)
- 10.6. Obsługa błędów wejścia i wyjścia (330)
- 10.7. Wczytywanie pojedynczej wartości (332)
- 10.7.1. Rozłożenie problemu na mniejsze części (334)
- 10.7.2. Oddzielenie warstwy komunikacyjnej od funkcji (337)
- 10.8. Definiowanie operatorów wyjściowych (338)
- 10.9. Definiowanie operatorów wejściowych (339)
- 10.10. Standardowa pętla wejściowa (340)
- 10.11. Wczytywanie pliku strukturalnego (341)
- 10.11.1. Reprezentacja danych w pamięci (342)
- 10.11.2. Odczytywanie struktur wartości (343)
- 10.11.3. Zmienianie reprezentacji (347)
Rozdział 11. Indywidualizacja operacji wejścia i wyjścia (353)
- 11.1. Regularność i nieregularność (354)
- 11.2. Formatowanie danych wyjściowych (354)
- 11.2.1. Wysyłanie na wyjście liczb całkowitych (355)
- 11.2.2. Przyjmowanie na wejściu liczb całkowitych (356)
- 11.2.3. Wysyłanie na wyjście liczb zmiennoprzecinkowych (357)
- 11.2.4. Precyzja (358)
- 11.2.5. Pola (360)
- 11.3. Otwieranie plików i pozycjonowanie (361)
- 11.3.1. Tryby otwierania plików (361)
- 11.3.2. Pliki binarne (362)
- 11.3.3. Pozycjonowanie w plikach (365)
- 11.4. Strumienie łańcuchowe (365)
- 11.5. Wprowadzanie danych wierszami (367)
- 11.6. Klasyfikowanie znaków (368)
- 11.7. Stosowanie niestandardowych separatorów (370)
- 11.8. Zostało jeszcze tyle do poznania (376)
Rozdział 12. Model graficzny (381)
- 12.1. Czemu grafika? (382)
- 12.2. Model graficzny (383)
- 12.3. Pierwszy przykład (384)
- 12.4. Biblioteka GUI (387)
- 12.5. Współrzędne (388)
- 12.6. Figury geometryczne (388)
- 12.7. Używanie klas figur geometrycznych (389)
- 12.7.1. Nagłówki graficzne i funkcja main (390)
- 12.7.2. Prawie puste okno (390)
- 12.7.3. Klasa Axis (392)
- 12.7.4. Rysowanie wykresu funkcji (394)
- 12.7.5. Wielokąty (394)
- 12.7.6. Prostokąty (395)
- 12.7.7. Wypełnianie kolorem (397)
- 12.7.8. Tekst (398)
- 12.7.9. Obrazy (399)
- 12.7.10. Jeszcze więcej grafik (400)
- 12.8. Uruchamianie programu (401)
- 12.8.1. Pliki źródłowe (402)
Rozdział 13. Klasy graficzne (407)
- 13.1. Przegląd klas graficznych (408)
- 13.2. Klasy Point i Line (410)
- 13.3. Klasa Lines (412)
- 13.4. Klasa Color (414)
- 13.5. Typ Line_style (416)
- 13.6. Typ Open_polyline (418)
- 13.7. Typ Closed_polyline (419)
- 13.8. Typ Polygon (420)
- 13.9. Typ Rectangle (422)
- 13.10. Wykorzystywanie obiektów bez nazw (426)
- 13.11. Typ Text (428)
- 13.12. Typ Circle (430)
- 13.13. Typ Ellipse (431)
- 13.14. Typ Marked_polyline (433)
- 13.15. Typ Marks (434)
- 13.16. Typ Mark (435)
- 13.17. Typ Image (436)
Rozdział 14. Projektowanie klas graficznych (443)
- 14.1. Zasady projektowania (444)
- 14.1.1. Typy (444)
- 14.1.2. Operacje (445)
- 14.1.3. Nazewnictwo (446)
- 14.1.4. Zmienność (448)
- 14.2. Klasa Shape (448)
- 14.2.1. Klasa abstrakcyjna (450)
- 14.2.2. Kontrola dostępu (451)
- 14.2.3. Rysowanie figur (454)
- 14.2.4. Kopiowanie i zmienność (456)
- 14.3. Klasy bazowe i pochodne (458)
- 14.3.1. Układ obiektu (459)
- 14.3.2. Tworzenie podklas i definiowanie funkcji wirtualnych (461)
- 14.3.3. Przesłanianie (461)
- 14.3.4. Dostęp (463)
- 14.3.5. Czyste funkcje wirtualne (464)
- 14.4. Zalety programowania obiektowego (465)
Rozdział 15. Graficzne przedstawienie funkcji i danych (471)
- 15.1. Wprowadzenie (472)
- 15.2. Rysowanie wykresów prostych funkcji (472)
- 15.3. Typ Function (476)
- 15.3.1. Argumenty domyślne (477)
- 15.3.2. Więcej przykładów (478)
- 15.4. Typ Axis (479)
- 15.5. Wartość przybliżona funkcji wykładniczej (481)
- 15.6. Przedstawianie danych na wykresach (486)
- 15.6.1. Odczyt danych z pliku (487)
- 15.6.2. Układ ogólny (488)
- 15.6.3. Skalowanie danych (489)
- 15.6.4. Budowanie wykresu (490)
Rozdział 16. Graficzne interfejsy użytkownika (497)
- 16.1. Różne rodzaje interfejsów użytkownika (498)
- 16.2. Przycisk Next (499)
- 16.3. Proste okno (500)
- 16.3.1. Funkcje zwrotne (501)
- 16.3.2. Pętla oczekująca (504)
- 16.4. Typ Button i inne pochodne typu Widget (505)
- 16.4.1. Widgety (505)
- 16.4.2. Przyciski (506)
- 16.4.3. Widgety In_box i Out_box (507)
- 16.4.4. Menu (507)
- 16.5. Przykład (508)
- 16.6. Inwersja kontroli (511)
- 16.7. Dodawanie menu (513)
- 16.8. Debugowanie kodu GUI (517)
Część III: Dane i algorytmy (523)
Rozdział 17. Wektory i pamięć wolna (525)
- 17.1. Wprowadzenie (526)
- 17.2. Podstawowe wiadomości na temat typu vector (527)
- 17.3. Pamięć, adresy i wskaźniki (529)
- 17.3.1. Operator sizeof (531)
- 17.4. Pamięć wolna a wskaźniki (532)
- 17.4.1. Alokacja obiektów w pamięci wolnej (533)
- 17.4.2. Dostęp poprzez wskaźniki (534)
- 17.4.3. Zakresy (535)
- 17.4.4. Inicjacja (536)
- 17.4.5. Wskaźnik zerowy (537)
- 17.4.6. Dealokacja pamięci wolnej (538)
- 17.5. Destruktory (540)
- 17.5.1. Generowanie destruktorów (542)
- 17.5.2. Destruktory a pamięć wolna (542)
- 17.6. Dostęp do elementów (544)
- 17.7. Wskaźniki na obiekty klas (545)
- 17.8. Babranie się w typach - void* i rzutowanie (546)
- 17.9. Wskaźniki i referencje (548)
- 17.9.1. Wskaźniki i referencje jako parametry (549)
- 17.9.2. Wskaźniki, referencje i dziedziczenie (550)
- 17.9.3. Przykład - listy (551)
- 17.9.4. Operacje na listach (552)
- 17.9.5. Zastosowania list (554)
- 17.10. Wskaźnik this (555)
- 17.10.1. Więcej przykładów użycia typu Link (557)
Rozdział 18. Wektory i tablice (563)
- 18.1. Wprowadzenie (564)
- 18.2. Kopiowanie (564)
- 18.2.1. Konstruktory kopiujące (566)
- 18.2.2. Przypisywanie z kopiowaniem (567)
- 18.2.3. Terminologia związana z kopiowaniem (569)
- 18.3. Podstawowe operacje (570)
- 18.3.1. Konstruktory jawne (571)
- 18.3.2. Debugowanie konstruktorów i destruktorów (573)
- 18.4. Uzyskiwanie dostępu do elementów wektora (575)
- 18.4.1. Problem stałych wektorów (576)
- 18.5. Tablice (577)
- 18.5.1. Wskaźniki na elementy tablicy (578)
- 18.5.2. Wskaźniki i tablice (580)
- 18.5.3. Inicjowanie tablic (582)
- 18.5.4. Problemy ze wskaźnikami (583)
- 18.6. Przykłady - palindrom (586)
- 18.6.1. Wykorzystanie łańcuchów (586)
- 18.6.2. Wykorzystanie tablic (587)
- 18.6.3. Wykorzystanie wskaźników (588)
Rozdział 19. Wektory, szablony i wyjątki (593)
- 19.1. Analiza problemów (594)
- 19.2. Zmienianie rozmiaru (596)
- 19.2.1. Reprezentacja (597)
- 19.2.2. Rezerwacja pamięci i pojemność kontenera (598)
- 19.2.3. Zmienianie rozmiaru (599)
- 19.2.4. Funkcja push_back() (599)
- 19.2.5. Przypisywanie (600)
- 19.2.6. Podsumowanie dotychczasowej pracy nad typem vector (601)
- 19.3. Szablony (602)
- 19.3.1. Typy jako parametry szablonów (603)
- 19.3.2. Programowanie ogólne (605)
- 19.3.3. Kontenery a dziedziczenie (607)
- 19.3.4. Liczby całkowite jako parametry szablonów (608)
- 19.3.5. Dedukcja argumentów szablonu (610)
- 19.3.6. Uogólnianie wektora (610)
- 19.4. Sprawdzanie zakresu i wyjątki (613)
- 19.4.1. Dygresja - uwagi projektowe (614)
- 19.4.2. Wyznanie na temat makr (615)
- 19.5. Zasoby i wyjątki (617)
- 19.5.1. Potencjalne problemy z zarządzaniem zasobami (617)
- 19.5.2. Zajmowanie zasobów jest inicjacją (619)
- 19.5.3. Gwarancje (620)
- 19.5.4. Obiekt auto_ptr (621)
- 19.5.5. Technika RAII dla wektora (622)
Rozdział 20. Kontenery i iteratory (629)
- 20.1. Przechowywanie i przetwarzanie danych (630)
- 20.1.1. Praca na danych (630)
- 20.1.2. Uogólnianie kodu (631)
- 20.2. Ideały twórcy biblioteki STL (634)
- 20.3. Sekwencje i iteratory (637)
- 20.3.1. Powrót do przykładu (639)
- 20.4. Listy powiązane (641)
- 20.4.1. Operacje list (642)
- 20.4.2. Iteracja (643)
- 20.5. Jeszcze raz uogólnianie wektora (645)
- 20.6. Przykład - prosty edytor tekstu (647)
- 20.6.1. Wiersze (649)
- 20.6.2. Iteracja (650)
- 20.7. Typy vector, list oraz string (653)
- 20.7.1. Funkcje insert() i erase() (654)
- 20.8. Dostosowanie wektora do biblioteki STL (656)
- 20.9. Dostosowywanie wbudowanych tablic do STL (658)
- 20.10. Przegląd kontenerów (660)
- 20.10.1. Kategorie iteratorów (662)
Rozdział 21. Algorytmy i słowniki (667)
- 21.1. Algorytmy biblioteki standardowej (668)
- 21.2. Najprostszy algorytm - find() (669)
- 21.2.1. Kilka przykładów z programowania ogólnego (670)
- 21.3. Ogólny algorytm wyszukiwania - find_if() (671)
- 21.4. Obiekty funkcyjne (673)
- 21.4.1. Abstrakcyjne spojrzenie na obiekty funkcyjne (674)
- 21.4.2. Predykaty składowych klas (675)
- 21.5. Algorytmy numeryczne (676)
- 21.5.1. Akumulacja (677)
- 21.5.2. Uogólnianie funkcji accumulate() (678)
- 21.5.3. Iloczyn skalarny (679)
- 21.5.4. Uogólnianie funkcji inner_product() (681)
- 21.6. Kontenery asocjacyjne (681)
- 21.6.1. Słowniki (682)
- 21.6.2. Opis ogólny kontenera map (684)
- 21.6.3. Jeszcze jeden przykład zastosowania słownika (687)
- 21.6.4. Kontener unordered_map (689)
- 21.6.5. Zbiory (691)
- 21.7. Kopiowanie (693)
- 21.7.1. Funkcja copy() (693)
- 21.7.2. Iteratory strumieni (694)
- 21.7.3. Utrzymywanie porządku przy użyciu kontenera set (696)
- 21.7.4. Funkcja copy_if() (696)
- 21.8. Sortowanie i wyszukiwanie (697)
Część IV: Poszerzanie horyzontów (703)
Rozdział 22. Ideały i historia (705)
- 22.1. Historia, ideały i profesjonalizm (706)
- 22.1.1. Cele i filozofie języków programowania (706)
- 22.1.2. Ideały programistyczne (708)
- 22.1.3. Style i paradygmaty (714)
- 22.2. Krótka historia języków programowania (717)
- 22.2.1. Pierwsze języki (718)
- 22.2.2. Korzenie nowoczesnych języków programowania (719)
- 22.2.3. Rodzina Algol (724)
- 22.2.4. Simula (731)
- 22.2.5. C (733)
- 22.2.6. C++ (736)
- 22.2.7. Dziś (738)
- 22.2.8. Źródła informacji (740)
Rozdział 23. Przetwarzanie tekstu (745)
- 23.1. Tekst (746)
- 23.2. Łańcuchy (746)
- 23.3. Strumienie wejścia i wyjścia (750)
- 23.4. Słowniki (750)
- 23.4.1. Szczegóły implementacyjne (755)
- 23.5. Problem (757)
- 23.6. Wyrażenia regularne (759)
- 23.7. Wyszukiwanie przy użyciu wyrażeń regularnych (761)
- 23.8. Składnia wyrażeń regularnych (764)
- 23.8.1. Znaki i znaki specjalne (764)
- 23.8.2. Rodzaje znaków (765)
- 23.8.3. Powtórzenia (766)
- 23.8.4. Grupowanie (767)
- 23.8.5. Alternatywa (767)
- 23.8.6. Zbiory i przedziały znaków (768)
- 23.8.7. Błędy w wyrażeniach regularnych (769)
- 23.9. Dopasowywanie przy użyciu wyrażeń regularnych (770)
- 23.10. Źródła (775)
Rozdział 24. Działania na liczbach (779)
- 24.1. Wprowadzenie (780)
- 24.2. Rozmiar, precyzja i przekroczenie zakresu (780)
- 24.2.1. Ograniczenia typów liczbowych (783)
- 24.3. Tablice (784)
- 24.4. Tablice wielowymiarowe w stylu języka C (785)
- 24.5. Biblioteka Matrix (786)
- 24.5.1. Wymiary i dostęp (787)
- 24.5.2. Macierze jednowymiarowe (789)
- 24.5.3. Macierze dwuwymiarowe (792)
- 24.5.4. Wejście i wyjście macierzy (794)
- 24.5.5. Macierze trójwymiarowe (795)
- 24.6. Przykład - rozwiązywanie równań liniowych (796)
- 24.6.1. Klasyczna eliminacja Gaussa (797)
- 24.6.2. Wybór elementu centralnego (798)
- 24.6.3. Testowanie (799)
- 24.7. Liczby losowe (800)
- 24.8. Standardowe funkcje matematyczne (802)
- 24.9. Liczby zespolone (803)
- 24.10. Źródła (804)
Rozdział 25. Programowanie systemów wbudowanych (809)
- 25.1. Systemy wbudowane (810)
- 25.2. Podstawy (813)
- 25.2.1. Przewidywalność (815)
- 25.2.2. Ideały (815)
- 25.2.3. Życie z awarią (816)
- 25.3. Zarządzanie pamięcią (818)
- 25.3.1. Problemy z pamięcią wolną (819)
- 25.3.2. Alternatywy dla ogólnej pamięci wolnej (822)
- 25.3.3. Przykład zastosowania puli (823)
- 25.3.4. Przykład użycia stosu (824)
- 25.4. Adresy, wskaźniki i tablice (825)
- 25.4.1. Niekontrolowane konwersje (825)
- 25.4.2. Problem - źle działające interfejsy (826)
- 25.4.3. Rozwiązanie - klasa interfejsu (829)
- 25.4.4. Dziedziczenie a kontenery (832)
- 25.5. Bity, bajty i słowa (834)
- 25.5.1. Bity i operacje na bitach (835)
- 25.5.2. Klasa bitset (839)
- 25.5.3. Liczby ze znakiem i bez znaku (840)
- 25.5.4. Manipulowanie bitami (844)
- 25.5.5. Pola bitowe (846)
- 25.5.6. Przykład - proste szyfrowanie (847)
- 25.6. Standardy pisania kodu (851)
- 25.6.1. Jaki powinien być standard kodowania (852)
- 25.6.2. Przykładowe zasady (854)
- 25.6.3. Prawdziwe standardy kodowania (859)
Rozdział 26. Testowanie (865)
- 26.1. Czego chcemy (866)
- 26.1.1. Zastrzeżenie (867)
- 26.2. Dowody (867)
- 26.3. Testowanie (867)
- 26.3.1. Testowanie regresyjne (868)
- 26.3.2. Testowanie jednostkowe (869)
- 26.3.3. Algorytmy i nie-algorytmy (875)
- 26.3.4. Testy systemowe (882)
- 26.3.5. Testowanie klas (886)
- 26.3.6. Znajdowanie założeń, które się nie potwierdzają (889)
- 26.4. Projektowanie pod kątem testowania (890)
- 26.5. Debugowanie (891)
- 26.6. Wydajność (891)
- 26.6.1. Kontrolowanie czasu (893)
- 26.7. Źródła (895)
Rozdział 27. Język C (899)
- 27.1. C i C++ to rodzeństwo (900)
- 27.1.1. Zgodność języków C i C++ (901)
- 27.1.2. Co jest w języku C++, czego nie ma w C (903)
- 27.1.3. Biblioteka standardowa języka C (904)
- 27.2. Funkcje (905)
- 27.2.1. Brak możliwości przeciążania nazw funkcji (906)
- 27.2.2. Sprawdzanie typów argumentów funkcji (906)
- 27.2.3. Definicje funkcji (907)
- 27.2.4. Wywoływanie C z poziomu C++ i C++ z poziomu C (909)
- 27.2.5. Wskaźniki na funkcje (911)
- 27.3. Mniej ważne różnice między językami (912)
- 27.3.1. Przestrzeń znaczników struktur (912)
- 27.3.2. Słowa kluczowe (913)
- 27.3.3. Definicje (914)
- 27.3.4. Rzutowanie w stylu języka C (915)
- 27.3.5. Konwersja typu void* (916)
- 27.3.6. Typ enum (917)
- 27.3.7. Przestrzenie nazw (917)
- 27.4. Pamięć wolna (918)
- 27.5. Łańcuchy w stylu języka C (919)
- 27.5.1. Łańcuchy w stylu języka C i const (922)
- 27.5.2. Operacje na bajtach (922)
- 27.5.3. Przykład - funkcja strcpy() (923)
- 27.5.4. Kwestia stylu (923)
- 27.6. Wejście i wyjście - nagłówek stdio (924)
- 27.6.1. Wyjście (924)
- 27.6.2. Wejście (925)
- 27.6.3. Pliki (927)
- 27.7. Stałe i makra (927)
- 27.8. Makra (928)
- 27.8.1. Makra podobne do funkcji (929)
- 27.8.2. Makra składniowe (930)
- 27.8.3. Kompilacja warunkowa (931)
- 27.9. Przykład - kontenery intruzyjne (932)
Dodatki (941)
Dodatek A: Zestawienie własności języka (943)
- A.1. Opis ogólny (944)
- A.2. Literały (946)
- A.3. Identyfikatory (950)
- A.4. Zakres, pamięć oraz czas trwania (950)
- A.5. Wyrażenia (953)
- A.6. Instrukcje (962)
- A.7. Deklaracje (964)
- A.8. Typy wbudowane (965)
- A.9. Funkcje (968)
- A.10. Typy zdefiniowane przez użytkownika (971)
- A.11. Wyliczenia (972)
- A.12. Klasy (972)
- A.13. Szablony (983)
- A.14. Wyjątki (986)
- A.15. Przestrzenie nazw (988)
- A.16. Aliasy (988)
- A.17. Dyrektywy preprocesora (989)
Dodatek B: Biblioteka standardowa (991)
- B.1. Przegląd (992)
- B.2. Obsługa błędów (995)
- B.3. Iteratory (997)
- B.4. Kontenery (1001)
- B.5. Algorytmy (1008)
- B.6. Biblioteka STL (1016)
- B.7. Strumienie wejścia i wyjścia (1018)
- B.8. Przetwarzanie łańcuchów (1024)
- B.9. Obliczenia (1028)
- B.10. Funkcje biblioteki standardowej C (1032)
- B.11. Inne biblioteki (1040)
Dodatek C: Podstawy środowiska Visual Studio (1043)
- C.1. Uruchamianie programu (1044)
- C.2. Instalowanie środowiska Visual Studio (1044)
- C.3. Tworzenie i uruchamianie programu (1044)
- C.4. Później (1046)
Dodatek D: Instalowanie biblioteki FLTK (1047)
- D.1. Wprowadzenie (1048)
- D.2. Pobieranie biblioteki FLTK z internetu (1048)
- D.3. Instalowanie biblioteki FLTK (1048)
- D.4. Korzystanie z biblioteki FLTK w Visual Studio (1049)
- D.5. Sprawdzanie, czy wszystko działa (1050)
Dodatek E: Implementacja GUI (1051)
- E.1. Implementacja wywołań zwrotnych (1052)
- E.2. Implementacja klasy Widget (1053)
- E.3. Implementacja klasy Window (1054)
- E.4. Klasa Vector_ref (1055)
- E.5. Przykład - widgety (1056)
Słowniczek (1059)
Bibliografia (1065)
Skorowidz (1069)
Zdjęcia (1105)