reklama - zainteresowany?

Język C++. Gotowe rozwiązania dla programistów - Helion

Język C++. Gotowe rozwiązania dla programistów
Autor: Matthew Wilson
Tytuł oryginału: Imperfect C++ : Practical Solutions for Real-Life Programming
Tłumaczenie: Zbigniew Banach, Michał Dadan, Tomasz Walczak
ISBN: 83-7361-841-4
stron: 696, Format: B5, okładka: miękka
Data wydania: 2005-06-28
Księgarnia: Helion

Cena książki: 74,90 zł

Dodaj do koszyka Język C++. Gotowe rozwiązania dla programistów

Tagi: C++ - Programowanie

C++ to popularny i uniwersalny język programowania. Jednak po dłuższym stosowaniu programiści zaczynają zauważać pewne jego niedoskonałości i ograniczenia. System typów, sposób działania niektórych kompilatorów, związki pomiędzy wskaźnikami i tablicami, nieprzewidziane w standardzie zachowania obiektów statycznych i bibliotek dynamicznych to tylko niektóre z nich. Aby je obejść, należy wykorzystywać wiele bardzo zaawansowanych i nieznanych wielu programistom metod.

Książka "Język C++. Gotowe rozwiązania dla programistów" to podręcznik dla tych programistów C++, którzy zaczęli już dostrzegać ograniczenia tego języka i zastanawiają się, jak sobie z nimi poradzić. Autor pokazuje sposoby ujarzmienia złożoności języka i uzyskania pełnej kontroli nad kodem. Przedstawia najpoważniejsze wady C++ i sposoby rozwiązywania powodowanych przez nie problemów. Opisuje również metody tworzenia stabilniejszego, bardziej uniwersalnego, wydajniejszego i łatwiejszego w pielęgnacji kodu.

  • Wymuszanie zaÅ‚ożeÅ„ projektowych
  • Cykl życia obiektów
  • Hermetyzacja zasobów, danych i typów
  • Modele dostÄ™pu do obiektów
  • ObsÅ‚uga wÄ…tków
  • Korzystanie z obiektów statycznych
  • Konwersja danych i typów
  • ZarzÄ…dzanie pamiÄ™ciÄ…
  • Sterowanie dziaÅ‚aniem kompilatora

Wszyscy programiści, niezależnie od stopnia zaawansowania, znajdą w tej książce wiadomości, które usprawnią i przyspieszą ich pracę.

Dodaj do koszyka Język C++. Gotowe rozwiązania dla programistów

Dodaj do koszyka Język C++. Gotowe rozwiązania dla programistów

Spis treści

Język C++. Gotowe rozwiązania dla programistów -- spis treści

Przedmowa (11)

Prolog. Filozofia praktyka niedoskonałego (19)

Niedoskonałości, ograniczenia, definicje i zalecenia (29)

Część I Podstawy (37)

Rozdział 1. Wymuszanie założeń projektowych: ograniczenia, kontrakty i asercje (39)

  • 1.1. Kilka oczywistych mÄ…droÅ›ci (40)
  • 1.2. Kontrakty kompilacji - ograniczenia (41)
  • 1.3. Kontrakty wykonawcze: warunki wejÅ›ciowe, koÅ„cowe i niezmienniki (49)
  • 1.4. Asercje (56)

Rozdział 2. Życie obiektów (67)

  • 2.1. Cykl życia obiektu (67)
  • 2.2. Kontrola klientów (68)
  • 2.3. Dobrodziejstwa list inicjalizacji (73)

Rozdział 3. Hermetyzacja zasobów (81)

  • 3.1. Poziomy hermetyzacji zasobów (81)
  • 3.2. Typy POD (82)
  • 3.3. PoÅ›rednie typy opakowujÄ…ce (84)
  • 3.4. Typy RRID (87)
  • 3.5. Typy RAII (92)
  • 3.6. RAII - podsumowanie (95)

Rozdział 4. Hermetyzacja danych i typy wartości (97)

  • 4.1. Poziomy hermetyzacji danych (98)
  • 4.2. Typy wartoÅ›ci a typy egzystencjalne (98)
  • 4.3. Klasyfikacja typów wartoÅ›ci (99)
  • 4.4. Typy otwarte (101)
  • 4.5. Typy hermetyzowane (103)
  • 4.6. Typy wartoÅ›ci (104)
  • 4.7. Arytmetyczne typy wartoÅ›ci (106)
  • 4.8. Typy wartoÅ›ci - podsumowanie (107)
  • 4.9. Hermetyzacja - podsumowanie (107)

Rozdział 5. Modele dostępu do obiektów (113)

  • 5.1. Gwarantowany czas życia (113)
  • 5.2. Kopia dla wywoÅ‚ujÄ…cego (115)
  • 5.3. OryginaÅ‚ dla wywoÅ‚ujÄ…cego (116)
  • 5.4. Obiekty współdzielone (116)

Rozdział 6. Zasięg klas (119)

  • 6.1. Wartość (119)
  • 6.2. Stan (124)
  • 6.3. API i usÅ‚ugi (128)
  • 6.4. Mechanizmy jÄ™zyka (132)

Część II Przetrwanie w świecie rzeczywistym (135)

Rozdział 7. ABI (137)

  • 7.1. UdostÄ™pnianie kodu (137)
  • 7.2. Wymagania ABI C (139)
  • 7.3. Wymagania ABI C++ (144)
  • 7.4. C - i wszystko jasne (148)

Rozdział 8. Obiekty bez granic (157)

  • 8.1. Czyżby przenoÅ›ne tabele funkcji wirtualnych? (157)
  • 8.2. PrzenoÅ›ne tabele vtable (161)
  • 8.3. PrzenoÅ›ność - podsumowanie (169)

Rozdział 9. Biblioteki dynamiczne (171)

  • 9.1. Jawne wywoÅ‚ania funkcji (171)
  • 9.2. Tożsamość - jednostki i przestrzeÅ„ konsolidacji (174)
  • 9.3. Czas życia (175)
  • 9.4. Wersjonowanie (176)
  • 9.5. WÅ‚asność zasobów (179)
  • 9.6. Biblioteki dynamiczne - podsumowanie (180)

Rozdział 10. Wątki (181)

  • 10.1. Synchronizacja dostÄ™pu do wartoÅ›ci caÅ‚kowitych (182)
  • 10.2. Synchronizacja dostÄ™pu do bloków kodu - regiony krytyczne (186)
  • 10.3. Wydajność operacji atomowych (190)
  • 10.4. Rozszerzenia wielowÄ…tkowe (195)
  • 10.5. TSS - skÅ‚adowanie danych w wÄ…tkach (199)

Rozdział 11. Obiekty statyczne (207)

  • 11.1. Globalne obiekty statyczne (209)
  • 11.2. Singletony (214)
  • 11.3. Lokalne obiekty statyczne funkcji (222)
  • 11.4. SkÅ‚adowe statyczne (224)
  • 11.5. Obiekty statyczne - podsumowanie (227)

Rozdział 12. Optymalizacja (229)

  • 12.1. Funkcje inline (229)
  • 12.2. Optymalizacja wartoÅ›ci zwracanej (231)
  • 12.3. Optymalizacja pustych klas bazowych (234)
  • 12.4. Optymalizacja pustych klas potomnych (237)
  • 12.5. Zapobieganie optymalizacji (239)

Część III Kwestie językowe (243)

Rozdział 13. Typy podstawowe (245)

  • 13.1. Komu bajt? (246)
  • 13.2. Typy caÅ‚kowitoliczbowe o staÅ‚ym rozmiarze (249)
  • 13.3. Duże typy caÅ‚kowitoliczbowe (255)
  • 13.4. Typy niebezpieczne (257)

Rozdział 14. Tablice i wskaźniki (263)

  • 14.1. Nie powtarzaj siÄ™ (263)
  • 14.2. Degeneracja tablic do wskaźników (265)
  • 14.3. dimensionof() (268)
  • 14.4. Nie można przekazywać tablic do funkcji (270)
  • 14.5. Tablice sÄ… zawsze przekazywane przez adres (273)
  • 14.6. Tablice typów dziedziczonych (274)
  • 14.7. Brak tablic wielowymiarowych (281)

Rozdział 15. Wartości (285)

  • 15.1. NULL - sÅ‚owo kluczowe, którego nie byÅ‚o (285)
  • 15.2. Spadek do zera (292)
  • 15.3. Naginanie prawdy (294)
  • 15.4. LiteraÅ‚y (296)
  • 15.5. StaÅ‚e (302)

Rozdział 16. Słowa kluczowe (311)

  • 16.1. interface (311)
  • 16.2. temporary (314)
  • 16.3. owner (317)
  • 16.4. explicit(_cast) (321)
  • 16.5. unique (326)
  • 16.6. final (327)
  • 16.7. NieobsÅ‚ugiwane sÅ‚owa kluczowe (328)

Rozdział 17. Składnia (331)

  • 17.1. UkÅ‚ad klasy (331)
  • 17.2. Wyrażenia warunkowe (334)
  • 17.3. for (338)
  • 17.4. Zapis zmiennych (341)

Rozdział 18. Definicja typów za pomocą typedef (345)

  • 18.1. Definicje typu dla wskaźników (347)
  • 18.2. Co wchodzi w skÅ‚ad definicji? (349)
  • 18.3. Nowe nazwy (354)
  • 18.4. Prawdziwe definicje typu (356)
  • 18.5. Dobre, zÅ‚e i brzydkie (361)

Część IV Świadome konwersje (369)

Rozdział 19. Rzutowanie (371)

  • 19.1. Niejawna konwersja (371)
  • 19.2. Rzutowanie w C++ (372)
  • 19.3. Przypadek rzutowania w stylu C (373)
  • 19.4. Rzutowanie na sterydach (375)
  • 19.5. explicit_cast (377)
  • 19.6. literal_cast (382)
  • 19.7. union_cast (385)
  • 19.8. comstl::interface_cast (388)
  • 19.9. boost::polymorphic_cast (399)
  • 19.10. Rzutowanie - podsumowanie (401)

Rozdział 20. Podkładki (403)

  • 20.1. Ogarnąć zmiany i zwiÄ™kszyć elastyczność (404)
  • 20.2. PodkÅ‚adki atrybutów (406)
  • 20.3. PodkÅ‚adki logiczne (408)
  • 20.4. PodkÅ‚adki sterujÄ…ce (409)
  • 20.5. PodkÅ‚adki konwertujÄ…ce (411)
  • 20.6. PodkÅ‚adki zÅ‚ożone (414)
  • 20.7. Przestrzenie nazw a sprawdzenie Koeniga (420)
  • 20.8. Dlaczego nie typy cechujÄ…ce? (423)
  • 20.9. Dopasowanie strukturalne (424)
  • 20.10. PrzeÅ‚amywanie monolitu (426)
  • 20.11. PodkÅ‚adki - podsumowanie (428)

Rozdział 21. Forniry (429)

  • 21.1. Lekkie RAII (430)
  • 21.2. WiÄ…zanie danych z operacjami (431)
  • 21.3. Przypomnienie zaÅ‚ożeÅ„ (438)
  • 21.4. Forniry - podsumowanie (440)

Rozdział 22. Sworznie (441)

  • 22.1. Dodawanie nowej funkcjonalnoÅ›ci (442)
  • 22.2. Wybór skóry (442)
  • 22.3. PrzesÅ‚anianie metod niewirtualnych (443)
  • 22.4. Wykorzystywanie zasiÄ™gu (445)
  • 22.5. Symulowany polimorfizm czasu kompilacji - sworznie wsteczne (447)
  • 22.6. Parametryzowalne pakowanie polimorficzne (449)
  • 22.7. Sworznie - podsumowanie (451)

Rozdział 23. Konstruktory szablonów (453)

  • 23.1. Ukryte koszty (455)
  • 23.2. WiszÄ…ce referencje (455)
  • 23.3. Specjalizacja konstruktorów szablonów (457)
  • 23.4. PoÅ›rednictwo argumentów (458)
  • 23.5. Ukierunkowywanie na konkretne rodzaje argumentów (460)
  • 23.6. Konstruktory szablonów - podsumowanie (461)

Część V Operatory (463)

Rozdział 24. operator bool() (465)

  • 24.1. operator int() const (465)
  • 24.2. operator void *() const (466)
  • 24.3. operator bool() const (467)
  • 24.4. operator !() - not! (468)
  • 24.5. operator boolean const *() const (468)
  • 24.6. operator int boolean::*() const (469)
  • 24.7. Stosowanie operatorów w praktyce (469)
  • 24.8. operator! (473)

Rozdział 25. Szybkie i nieinwazyjne łączenie ciągów znaków (475)

  • 25.1. fast_string_concatenator<> (476)
  • 25.2. Wydajność (484)
  • 25.3. Praca z innymi klasami obsÅ‚ugujÄ…cymi ciÄ…gi znaków (487)
  • 25.4. Inicjalizacja Å‚Ä…czenia (488)
  • 25.5. Patologiczne nawiasowanie (489)
  • 25.6. Standaryzacja (490)

Rozdział 26. Jaki jest Twój adres? (491)

  • 26.1. Nie można pobrać rzeczywistego adresu (491)
  • 26.2. Co dzieje siÄ™ w czasie konwersji? (494)
  • 26.3. Co zwracać? (496)
  • 26.4. Jaki jest Twój adres - podsumowanie (498)

Rozdział 27. Operatory indeksowania (501)

  • 27.1. PrzeksztaÅ‚canie wskaźników i operatory indeksowania (501)
  • 27.2. ObsÅ‚uga bÅ‚Ä™dów (504)
  • 27.3. Zwracana wartość (506)

Rozdział 28. Operatory inkrementacji (509)

  • 28.1. BrakujÄ…ce operatory przyrostkowe (510)
  • 28.2. Wydajność (511)

Rozdział 29. Typy arytmetyczne (515)

  • 29.1. Definicja klasy (515)
  • 29.2. Konstruktor domyÅ›lny (516)
  • 29.3. Inicjalizacja (nadawanie wartoÅ›ci) (517)
  • 29.4. Konstruktor kopiujÄ…cy (519)
  • 29.5. Przypisanie (519)
  • 29.6. Operatory arytmetyczne (520)
  • 29.7. Operatory porównania (520)
  • 29.8. DostÄ™p do wartoÅ›ci (521)
  • 29.9. Klasa SInteger64 (521)
  • 29.10. Obcinanie, promocja do wiÄ™kszego typu i testowanie warunków (522)
  • 29.11. Typy arytmetyczne - podsumowanie (525)

Rozdział 30. Skrócona ewaluacja (527)

Część VI Rozszerzanie możliwości języka C++ (529)

Rozdział 31. Czas życia wartości zwracanej (531)

  • 31.1. Klasyfikacja problemów zwiÄ…zanych z czasem życia wartoÅ›ci zwracanej (532)
  • 31.2. Do czego sÅ‚uży zwracanie przez referencjÄ™? (533)
  • 31.3. RozwiÄ…zanie pierwsze - szablon integer_to_string<> (533)
  • 31.4. RozwiÄ…zanie drugie - mechanizm TSS (536)
  • 31.5. RozwiÄ…zanie trzecie - rozszerzanie RVL (541)
  • 31.6. RozwiÄ…zanie czwarte - statyczne okreÅ›lanie rozmiaru tablicy (543)
  • 31.7. RozwiÄ…zanie piÄ…te - podkÅ‚adki konwertujÄ…ce (545)
  • 31.8. Wydajność (547)
  • 31.9. RVL - wielkie zwyciÄ™stwo automatycznego przywracania pamiÄ™ci (548)
  • 31.10. Potencjalne zastosowania (549)
  • 31.11. RVL - podsumowanie (549)

Rozdział 32. Pamięć (551)

  • 32.1. Rodzaje pamiÄ™ci (551)
  • 32.2. Najlepsze w obu rodzajach (553)
  • 32.3. Alokatory (565)
  • 32.4. Pamięć - podsumowanie (569)

Rozdział 33. Tablice wielowymiarowe (571)

  • 33.1. UdostÄ™pnianie skÅ‚adni indeksowania (572)
  • 33.2. OkreÅ›lanie rozmiaru w czasie wykonywania programu (573)
  • 33.3. OkreÅ›lanie rozmiaru na etapie kompilacji (579)
  • 33.4. DostÄ™p blokowy (582)
  • 33.5. Wydajność (586)
  • 33.6. Tablice wielowymiarowe - podsumowanie (589)

Rozdział 34. Funktory i zakresy (591)

  • 34.1. BaÅ‚agan skÅ‚adniowy (591)
  • 34.2. Funkcja for_all() (592)
  • 34.3. Funktory lokalne (595)
  • 34.4. Zakresy (604)
  • 34.5. Funktory i zakresy - podsumowanie (612)

Rozdział 35. Właściwości (613)

  • 35.1. Rozszerzenia kompilatora (615)
  • 35.2. Sposoby implementacji (616)
  • 35.3. WÅ‚aÅ›ciwoÅ›ci pola (617)
  • 35.4. WÅ‚aÅ›ciwoÅ›ci metody (624)
  • 35.5. WÅ‚aÅ›ciwoÅ›ci statyczne (638)
  • 35.6. WÅ‚aÅ›ciwoÅ›ci wirtualne (642)
  • 35.7. Zastosowania wÅ‚aÅ›ciwoÅ›ci (642)
  • 35.8. WÅ‚aÅ›ciwoÅ›ci - podsumowanie (645)

Dodatki (647)

Dodatek A Kompilatory i biblioteki (649)

  • A.1. Kompilatory (649)
  • A.2. Biblioteki (651)
  • A.3. Inne źródÅ‚a (653)

Dodatek B Pycha w końcu Cię zgubi! (655)

  • B.1. Przeciążanie operatora (656)
  • B.2. Jak zawiodÅ‚o DRY (657)
  • B.3. Programowanie paranoiczne (657)
  • B.4. Do szaleÅ„stwa i jeszcze dalej (658)

Dodatek C Arturius (661)

Dodatek D PÅ‚yta CD (663)

Epilog (665)

Bibliografia (667)

Skorowidz (675)

Dodaj do koszyka Język C++. Gotowe rozwiązania dla programistów

Code, Publish & WebDesing by CATALIST.com.pl



(c) 2005-2024 CATALIST agencja interaktywna, znaki firmowe należą do wydawnictwa Helion S.A.