okladka

Poznaj skuteczne rozwiązania problemów,
jakie napotkasz podczas codziennej pracy programisty

  • Prawidłowo zoptymalizuj kod źródłowy
  • Zaprojektuj efektywną obsługę wyjątków
  • Naucz się odpowiednio korzystać z przestrzeni nazw

Nauka każdego nowego zagadnienia przebiega zdecydowanie szybciej i efektywniej pod kierunkiem osoby znającej temat. Nie inaczej jest w przypadku nauki programowania w języku C++. Programowanie w tym języku wymaga dogłębnego opanowania możliwości biblioteki standardowej, inżynierii oprogramowania i wielu innych tematów. Rozwiązując samodzielnie zagadki, jakie często pojawiają się podczas poznawania języka C++ lepiej zapamiętujemy ich rozwiązania, dzięki czemu łatwiej możemy zastosować je w codziennej pracy.

Książka "Wyjątkowy język C++. 40 nowych łamigłówek, zadań programistycznych i rozwiązań" to zbiór zagadnień związanych z niemal wszystkimi aspektami programowania w C++, przedstawionych w formie zagadek z rozwiązaniami. Opisuje zarówno podstawy stosowania szablonów, biblioteki standardowej i projektowanie klas, jak i tematy zaawansowane -- przestrzenie nazw, wyjątki, dziedziczenie i zarządzanie zasobami. Czytając ją, przekonasz się, w jaki sposób można użyć pozornie niezwiązanych ze sobą elementów do opracowania nowych i oryginalnych rozwiązań częstych problemów.

  • Poprawne stosowanie predykatów
  • Kontenery i wskaźniki
  • Korzystanie z szablonów
  • Optymalizacja kodu
  • Bezpieczna obsługa wyjątków
  • Mechanizmy dziedziczenia i polimorfizmu
  • Zarządzanie zasobami i pamięcią
  • Makrodefinicje
  • Przestrzenie nazw

Gdy zrozumiesz zagadnienia opisywane w tej książce, nie będziesz musiał podczas programowania zastanawiać się nad szczegółami -- będziesz mógł skoncentrować się na problemach, które naprawdę chcesz rozwiązać.

O autorze:
Herb Sutter to ekspert od programowania w języku C++. Jest regularnie zapraszany do wygłaszania wykładów na konferencjach dla programistów. [więcej...\


Słowo wstępne (7)
Przedmowa (9)
Rozdział 1. Programowanie uogólnione i biblioteka standardowa języka C++ (13)
  • Zagadnienie 1. Przełączanie strumieni (14)
  • Zagadnienie 2. Predykaty. Część 1 - co usuwa funkcja remove()? (18)
  • Zagadnienie 3. Predykaty. Część 2 - pamięć stanu (22)
  • Zagadnienie 4. Szablony rozszerzalne - dziedziczenie czy cechy charakterystyczne? (29)
  • Zagadnienie 5. Słowo kluczowe typename (42)
  • Zagadnienie 6. Kontenery, wskaźniki i kontenery, które nie są kontenerami (46)
  • Zagadnienie 7. Stosowanie kontenerów vector i deque (55)
  • Zagadnienie 8. Stosowanie kontenerów set i map (62)
  • Zagadnienie 9. Równoważny kod? (67)
  • Zagadnienie 10. Specjalizacja i przeciążanie szablonów (72)
  • Zagadnienie 11. Gra Mastermind (77)
Rozdział 2. Optymalizacja a efektywność (89)
  • Zagadnienie 12. Słowo kluczowe inline (89)
  • Zagadnienie 13. Opieszała optymalizacja. Część 1 - klasa String (93)
  • Zagadnienie 14. Opieszała optymalizacja. Część 2 - wprowadzamy opieszałość (96)
  • Zagadnienie 15. Opieszała optymalizacja. Część 3 - iteratory i referencje (100)
  • Zagadnienie 16. Opieszała optymalizacja. Część 4 - środowiska wielowątkowe (108)
Rozdział 3. Zagadnienia i techniki związane z bezpieczną obsługą wyjątków (121)
  • Zagadnienie 17. Błędy konstruktora. Część 1 - czas życia obiektu (121)
  • Zagadnienie 18. Błędy konstruktora. Część 2 - wchłanianie (125)
  • Zagadnienie 19. Wyjątki nieprzechwycone (132)
  • Zagadnienie 20. Problem niezarządzanego wskaźnika. Część 1 - obliczanie parametrów (137)
  • Zagadnienie 21. Problem niezarządzanego wskaźnika. Część 2 - co z szablonem auto_ptr? (140)
  • Zagadnienie 22. Projektowanie klas zapewniających bezpieczną obsługę wyjątków. Część 1 - operator przypisania (146)
  • Zagadnienie 23. Projektowanie klas zapewniających bezpieczną obsługę wyjątków. Część 2 - dziedziczenie (154)
Rozdział 4. Dziedziczenie i polimorfizm (159)
  • Zagadnienie 24. Dlaczego dziedziczenie wielobazowe? (159)
  • Zagadnienie 25. Emulowanie dziedziczenia wielobazowego (163)
  • Zagadnienie 26. Dziedziczenie wielobazowe i problem bliźniąt syjamskich (166)
  • Zagadnienie 27. Metody (nie)czysto wirtualne (170)
  • Zagadnienie 28. Polimorfizm kontrolowany (175)
Rozdział 5. Zarządzanie zasobami i pamięcią (179)
  • Zagadnienie 29. Stosowanie szablonu auto_ptr (179)
  • Zagadnienie 30. Inteligentne wskaźniki jako składowe. Część 1 - problem z auto_ptr . (186)
  • Zagadnienie 31. Inteligentne wskaźniki jako składowe. Część 2 - kurs na ValuePtr (191)
Rozdział 6. Funkcje swobodne i makrodefinicje (203)
  • Zagadnienie 32. Rekurencyjne deklaracje (203)
  • Zagadnienie 33. Imitowanie funkcji zagnieżdżonych (208)
  • Zagadnienie 34. Dyrektywy preprocesora (216)
  • Zagadnienie 35. Makrodefinicje (219)
Rozdział 7. Zagadnienia różne (225)
  • Zagadnienie 36. Inicjalizacja (225)
  • Zagadnienie 37. Deklaracje zapowiadające (228)
  • Zagadnienie 38. Instrukcja typedef (229)
  • Zagadnienie 39. Przestrzenie nazw. Część 1 - deklaracje i dyrektywy using (232)
  • Zagadnienie 40. Przestrzenie nazw. Część 2 - migracja do przestrzeni nazw (235)
Posłowie (245)
Dodatek A Optymalizacje, które nie są optymalizacjami (247)
Dodatek B Wyniki testów (263)
Bibliografia (271)
Skorowidz (273)