-
nowość
Programowanie. Teoria i praktyka w C++ - ebook
Programowanie. Teoria i praktyka w C++ - ebook
Książka twórcy języka C++
Chłoń wiedzę od samego twórcy języka C++!
Chcesz naprawdę dobrze opanować C++? Ucz się od najlepszego! Bjarne Stroustrup, twórca tego języka, jak nikt inny potrafi wyjaśnić zarówno podstawy, jak i najbardziej zaawansowane metody programowania. To on zaprojektował i zaimplementował C++, a w tej książce dzieli się swoim bogatym doświadczeniem i ekspercką wiedzą. Teraz dostępną także dla Ciebie!
Programowanie. Teoria i praktyka w C++ to kompletny przewodnik, który krok po kroku odkrywa tajniki jednego z najważniejszych i najpotężniejszych języków programowania. Najnowsze wydanie zostało zaktualizowane i uwzględnia standardy C++20 i C++23, dzięki czemu będziesz się uczyć na przykładach zgodnych z aktualnym kierunkiem rozwoju języka.
Dzięki tej książce dowiesz się, jak pisać kod nie tylko wydajny, ale i elegancki. Poznasz zasady, które z powodzeniem zastosujesz również w innych językach programowania. Autor wprowadzi Cię w świat kluczowych paradygmatów programowania od proceduralnego, przez obiektowe, aż po generyczne i pokaże, jak tworzyć bezpieczne, praktyczne i łatwe w utrzymaniu programy. Oprócz technik programowania wysokopoziomowego opanujesz techniki niższego poziomu, niezbędne do efektywnego korzystania z możliwości sprzętu.
Znajdziesz tu zarówno solidne podstawy, jak i bardziej zaawansowane zagadnienia, takie jak:
- opis pojęć i technik programistycznych
- instrukcje sterujące, obsługa błędów, funkcje i system typów
- obsługa danych liczbowych i tekstu
- praca z graficznym interfejsem użytkownika
- kontenery i algorytmy w bibliotece STL
- parametryzacja klas i funkcji
Niezależnie od tego, czy dopiero zaczynasz przygodę z C++, czy chcesz rozwinąć swoje umiejętności tu znajdziesz wszystko, czego potrzebujesz, aby pisać doskonały kod.
Spis treści
Wstęp
- Poprzednie wydania
- Podziękowania
Uwagi do czytelnika
- 0.1. Struktura książki
- 0.1.1. Informacje ogólne
- 0.1.2. Ćwiczenia, praca domowa itp.
- 0.1.3. Po przeczytaniu tej książki
- 0.2. Filozofia nauczania i uczenia się
- 0.2.1. Słowo do studentów
- 0.2.2. Słowo do nauczycieli
- 0.3. Standard ISO C++
- 0.3.1. Przenośność
- 0.3.2. Gwarancje
- 0.3.3. Historia języka C++ w pigułce
- 0.4. Pomoc PPP
- 0.4.1. Zasoby sieciowe
- 0.5. Biografia autora
- 0.6. Bibliografia
Część I. Podstawy
- 1. Witaj, świecie!
- 1.1. Programy
- 1.2. Klasyczny pierwszy program
- 1.3. Kompilacja
- 1.4. Łączenie
- 1.5. Środowiska programistyczne
- 2. Obiekty, typy i wartości
- 2.1. Dane wejściowe
- 2.2. Zmienne
- 2.3. Typy danych wejściowych
- 2.4. Operacje i operatory
- 2.5. Przypisanie i inicjalizacja
- 2.5.1. Przykład wykrywania powtarzających się słów
- 2.5.2. Złożone operatory przypisania
- 2.5.3. Przykład: szukanie powtarzających się słów
- 2.6. Nazwy
- 2.7. Typy i obiekty
- 2.8. Bezpieczeństwo typów
- 2.9. Konwersje
- 2.10. Dedukcja typów: auto
- 3. Wykonywanie obliczeń
- 3.1. Wykonywanie obliczeń
- 3.2. Cele i narzędzia
- 3.3. Wyrażenia
- 3.3.1. Wyrażenia stałe
- 3.3.2. Operatory
- 3.4. Instrukcje
- 3.4.1. Selekcja
- 3.4.2. Iteracja
- 3.5. Funkcje
- 3.5.1. Po co zaprzątać sobie głowę funkcjami?
- 3.5.2. Deklarowanie funkcji
- 3.6. Wektor
- 3.6.1. Przeglądanie zawartości wektora
- 3.6.2. Powiększanie wektora
- 3.6.3. Przykład wczytywania liczb do programu
- 3.6.4. Przykład z użyciem tekstu
- 3.7. Właściwości języka
- 4. Błędy
- 4.1. Wstęp
- 4.2. Źródła błędów
- 4.3. Błędy kompilacji
- 4.3.1. Błędy składni
- 4.3.2. Błędy typów
- 4.4. Błędy konsolidacji
- 4.5. Błędy czasu wykonania
- 4.5.1. Rozwiązywanie problemu przez wywołującego
- 4.5.2. Rozwiązywanie problemu przez wywoływanego
- 4.5.3. Raportowanie błędów
- 4.6. Wyjątki
- 4.6.1. Nieprawidłowe argumenty
- 4.6.2. Błędy zakresu
- 4.6.3. Nieprawidłowe dane wejściowe
- 4.7. Unikanie i znajdowanie błędów
- 4.7.1. Szacowanie
- 4.7.2. Debugowanie
- 4.7.3. Asercje
- 4.7.4. Testowanie
- 4.7.5. Liczby losowe
- 5. Pisanie programu
- 5.1. Problem
- 5.2. Przemyślenie problemu
- 5.2.1. Etapy rozwoju oprogramowania
- 5.2.2. Strategia
- 5.3. Wracając do kalkulatora
- 5.3.1. Pierwsza próba
- 5.3.2. Tokeny
- 5.3.3. Implementowanie tokenów
- 5.3.4. Używanie tokenów
- 5.4. Powrót do tablicy
- 5.4.1. Gramatyki
- 5.4.2. Pisanie gramatyki
- 5.5. Zamiana gramatyki w kod
- 5.5.1. Implementowanie zasad gramatyki
- 5.5.2. Wyrażenia
- 5.5.3. Składniki
- 5.5.4. Podstawowe elementy wyrażeń
- 5.6. Wypróbowywanie pierwszej wersji
- 5.7. Wypróbowywanie drugiej wersji
- 5.8. Strumienie tokenów
- 5.8.1. Implementacja typu Token_stream
- 5.8.2. Wczytywanie tokenów
- 5.8.3. Wczytywanie liczb
- 5.9. Struktura programu
- 6. Kończenie programu
- 6.1. Wprowadzenie
- 6.2. Wejście i wyjście
- 6.3. Obsługa błędów
- 6.4. Liczby ujemne
- 6.5. Reszta z dzielenia
- 6.6. Oczyszczanie kodu
- 6.6.1. Stałe symboliczne
- 6.6.2. Użycie funkcji
- 6.6.3. Układ kodu
- 6.6.4. Komentarze
- 6.7. Odzyskiwanie sprawności po wystąpieniu błędu
- 6.8. Zmienne
- 6.8.1. Zmienne i definicje
- 6.8.2. Wprowadzanie nazw
- 6.8.3. Nazwy predefiniowane
- 6.8.4. Czy to już koniec?
- 7. Szczegóły techniczne - funkcje itp.
- 7.1. Szczegóły techniczne
- 7.2. Deklaracje i definicje
- 7.2.1. Rodzaje deklaracji
- 7.2.2. Deklaracje stałych i zmiennych
- 7.2.3. Domyślna inicjalizacja
- 7.3. Zakres
- 7.4. Wywoływanie i wartość zwrotna funkcji
- 7.4.1. Deklarowanie argumentów i typu zwrotnego
- 7.4.2. Zwracanie wartości
- 7.4.3. Przekazywanie przez wartość
- 7.4.4. Przekazywanie argumentów przez stałą referencję
- 7.4.5. Przekazywanie przez referencję
- 7.4.6. Przekazywanie przez wartość a przez referencję
- 7.4.7. Sprawdzanie argumentów i konwersja
- 7.4.8. Implementacja wywołań funkcji
- 7.4.9. Obliczenia w czasie kompilacji
- 7.4.10. Przyrostkowy typ zwrotny
- 7.5. Porządek wykonywania instrukcji
- 7.5.1. Obliczanie wartości wyrażeń
- 7.5.2. Globalna inicjalizacja
- 7.6. Przestrzenie nazw
- 7.6.1. Dyrektywy i deklaracje using
- 7.7. Moduły i nagłówki
- 7.7.1. Moduły
- 7.7.2. Pliki nagłówkowe
- 8. Szczegóły techniczne - klasy it
- 8.1. Typy zdefiniowane przez użytkownika
- 8.2. Klasy i składowe klas
- 8.3. Interfejs i implementacja
- 8.4. Tworzenie klasy - Date
- 8.4.1. Struktury i funkcje
- 8.4.2. Funkcje składowe i konstruktory
- 8.4.3. Ukrywanie szczegółów
- 8.4.4. Definiowanie funkcji składowych
- 8.4.5. Odwoływanie się do bieżącego obiektu
- 8.4.6. Raportowanie błędów
- 8.5. Wyliczenia
- 8.5.1. "Zwykłe" wyliczenia
- 8.6. Przeciążanie operatorów
- 8.7. Interfejsy klas
- 8.7.1. Typy argumentów
- 8.7.2. Kopiowanie
- 8.7.3. Konstruktory domyślne
- 8.7.4. Stałe funkcje składowe
- 8.7.5. Funkcje składowe i funkcje pomocnicze
- 8.7.6. Standard ISO
Część II. Wejście i wyjście
- 9. Strumienie wejścia i wyjścia
- 9.1. Wejście i wyjście
- 9.2. Model strumieni wejścia i wyjścia
- 9.3. Pliki
- 9.3.1. Otwieranie pliku
- 9.3.2. Odczytywanie i zapisywanie plików
- 9.4. Obsługa błędów wejścia i wyjścia
- 9.5. Wczytywanie pojedynczej wartości
- 9.5.1. Rozłożenie problemu na mniejsze części
- 9.5.2. Oddzielenie warstwy komunikacyjnej od funkcji
- 9.6. Definiowanie operatorów wyjściowych
- 9.7. Definiowanie operatorów wejściowych
- 9.8. Standardowa pętla wejściowa
- 9.9. Wczytywanie pliku strukturalnego
- 9.9.1. Reprezentacja danych w pamięci
- 9.9.2. Odczytywanie struktur wartości
- 9.9.3. Zmienianie reprezentacji
- 9.10. Formatowanie
- 9.10.1. Przyjmowanie na wejściu i wysyłanie na wyjście liczb całkowitych
- 9.10.2. Przyjmowanie na wejściu i wysyłanie na wyjście liczb zmiennoprzecinkowych
- 9.10.3. Przyjmowanie na wejściu i wysyłanie na wyjście łańcuchów
- 9.10.4. Przyjmowanie na wejściu i wysyłanie na wyjście znaków
- 9.10.5. Rozszerzanie wejścia i wyjścia
- 9.10.6. Funkcja format()
- 9.11. Strumienie łańcuchowe
- 10. Projektowanie klas graficznych
- 10.1. Czemu grafika?
- 10.2. Model graficzny
- 10.3. Pierwszy przykład
- 10.4. Biblioteka GUI
- 10.5. Współrzędne
- 10.6. Figury geometryczne
- 10.7. Używanie klas figur geometrycznych
- 10.7.1. Klasa Axis
- 10.7.2. Rysowanie wykresu funkcji
- 10.7.3. Wielokąty
- 10.7.4. Prostokąty
- 10.7.5. Wypełnianie kolorem
- 10.7.6. Tekst
- 10.7.7. Obrazy
- 10.7.8. Jeszcze więcej grafik
- 10.8. Uruchamianie pierwszego przykładu
- 10.8.1. Pliki źródłowe
- 10.8.2. Składanie wszystkiego w całość
- 11. Klasy graficzne
- 11.1. Przegląd klas graficznych
- 11.2. Klasy Point i Line
- 11.3. Klasa Lines
- 11.3.1. Inicjalizacja
- 11.4. Klasa Color
- 11.5. Typ Line_style
- 11.6. Linie łamane
- 11.6.1. Typ Open_polyline
- 11.6.2. Typ Closed_polyline
- 11.6.3. Typ Marked_polyline
- 11.6.4. Typ Marks
- 11.7. Figury zamknięte
- 11.7.1. Typ Polygon
- 11.7.2. Typ Rectangle
- 11.7.3. Wykorzystywanie obiektów bez nazw
- 11.7.4. Typ Circle
- 11.7.5. Typ Ellipse
- 11.8. Typ Text
- 11.9. Typ Mark
- 11.10. Typ Image
- 12. Projektowanie klas
- 12.1. Zasady projektowania
- 12.1.1. Typy
- 12.1.2. Operacje
- 12.1.3. Nazewnictwo
- 12.1.4. Zmienność
- 12.2. Klasa Shape
- 12.2.1. Klasa abstrakcyjna
- 12.2.2. Kontrola dostępu
- 12.2.3. Rysowanie figur
- 12.3. Klasy bazowe i pochodne
- 12.3.1. Układ obiektu
- 12.3.2. Tworzenie podklas i definiowanie funkcji wirtualnych
- 12.3.3. Przesłanianie
- 12.3.4. Dostęp
- 12.3.5. Czyste funkcje wirtualne
- 12.4. Inne funkcje klasy Shape
- 12.4.1. Kopiowanie
- 12.4.2. Przesuwanie figur
- 12.5. Zalety programowania obiektowego
- 12.1. Zasady projektowania
- 13. Graficzne przedstawienie funkcji i danych
- 13.1. Wprowadzenie
- 13.2. Rysowanie wykresów prostych funkcji
- 13.3. Typ Function
- 13.3.1. Argumenty domyślne
- 13.3.2. Więcej przykładów
- 13.3.3. Wyrażenia lambda
- 13.4. Typ Axis
- 13.5. Wartość przybliżona funkcji wykładniczej
- 13.6. Przedstawianie danych na wykresach
- 13.6.1. Odczyt danych z pliku
- 13.6.2. Układ ogólny
- 13.6.3. Skalowanie danych
- 13.6.4. Budowanie wykresu
- 14. Graficzne interfejsy użytkownika
- 14.1. Różne rodzaje interfejsów użytkownika
- 14.2. Przycisk Dalej
- 14.3. Proste okno
- 14.3.1. Pętla oczekująca
- 14.4. Typ Button i inne pochodne typu Widget
- 14.4.1. Widgety
- 14.4.2. Przyciski
- 14.4.3. Widgety In_box i Out_box
- 14.4.4. Menu
- 14.5. Przykład: rysowanie linii
- 14.5.1. Inwersja kontroli
- 14.5.2. Dodawanie menu
- 14.6. Prosta animacja
- 14.7. Debugowanie kodu GUI
Część III. Dane i algorytmy
- 15. Wektory i pamięć wolna
- 15.1. Wprowadzenie
- 15.2. Podstawowe wiadomości na temat typu vector
- 15.3. Pamięć, adresy i wskaźniki
- 15.3.1. Operator sizeof
- 15.4. Pamięć wolna a wskaźniki
- 15.4.1. Alokacja obiektów w pamięci wolnej
- 15.4.2. Dostęp poprzez wskaźniki
- 15.4.3. Inicjalizacja
- 15.4.4. Wskaźnik zerowy
- 15.4.5. Dealokacja pamięci wolnej
- 15.5. Destruktory
- 15.5.1. Generowanie destruktorów
- 15.5.2. Destruktory wirtualne
- 15.6. Dostęp do elementów
- 15.7. Przykład - listy
- 15.7.1. Operacje na listach
- 15.7.2. Zastosowania list
- 15.8. Wskaźnik this
- 15.8.1. Więcej przykładów użycia typu Link
- 16. Tablice, wskaźniki i referencje
- 16.1. Tablice
- 16.1.1. Arytmetyka wskaźników
- 16.2. Wskaźniki i referencje
- 16.2.1. Wskaźniki i referencje jako parametry
- 16.2.2. Wskaźniki jako parametry
- 16.3. Łańcuchy w stylu języka C
- 16.4. Alternatywy dla wskaźników
- 16.4.1. Typ span
- 16.4.2. Typ array
- 16.4.3. Typ not_null
- 16.5. Przykłady: palindromy
- 16.5.1. Wykorzystanie łańcuchów
- 16.5.2. Wykorzystanie tablic
- 16.5.3. Wykorzystanie wskaźników
- 16.5.4. Wykorzystanie typu span
- 16.1. Tablice
- 17. Podstawowe operacje
- 17.1. Wprowadzenie
- 17.2. Dostęp do elementów
- 17.3. Inicjalizacja
- 17.4. Kopiowanie i przenoszenie
- 17.4.1. Konstruktory kopiujące
- 17.4.2. Przypisywanie z kopiowaniem
- 17.4.3. Terminologia związana z kopiowaniem
- 17.4.4. Przenoszenie
- 17.5. Podstawowe operacje
- 17.5.1. Konstruktory jawne
- 17.5.2. Debugowanie konstruktorów i destruktorów
- 17.6. Inne przydatne operacje
- 17.6.1. Operatory porównań
- 17.6.2. Pokrewne operatory
- 17.7. Pozostałe problemy z klasą Vector
- 17.8. Zmienianie rozmiaru
- 17.8.1. Reprezentacja
- 17.8.2. Rezerwacja pamięci i pojemność kontenera
- 17.8.3. Zmienianie rozmiaru
- 17.8.4. Funkcja push_back()
- 17.8.5. Przypisywanie
- 17.9. Podsumowanie dotychczasowej pracy nad typem vector
- 18. Szablony i wyjątki
- 18.1. Szablony
- 18.1.1. Typy jako parametry szablonów
- 18.1.2. Programowanie ogólne
- 18.1.3. Koncepcje
- 18.1.4. Kontenery a dziedziczenie
- 18.1.5. Wartościowe parametry szablonów
- 18.2. Uogólnianie wektora
- 18.2.1. Alokatory
- 18.3. Sprawdzanie zakresu i wyjątki
- 18.3.1. Dygresja - uwagi projektowe
- 18.3.2. Moduł PPP_support
- 18.4. Zasoby i wyjątki
- 18.4.1. Potencjalne problemy z zarządzaniem zasobami
- 18.4.2. Zajmowanie zasobów jest inicjalizacją
- 18.4.3. Gwarancje dotyczące zarządzania zasobami
- 18.4.4. Technika RAII dla wektora
- 18.5. Wskaźniki zarządzające zasobami
- 18.5.1. Zwrot przez przeniesienie
- 18.5.2. Obiekt unique_ptr
- 18.5.3. Obiekt shared_ptr
- 18.1. Szablony
- 19. Kontenery i iteratory
- 19.1. Przechowywanie i przetwarzanie danych
- 19.1.1. Praca na danych
- 19.1.2. Uogólnianie kodu
- 19.1.3. Ideały twórcy biblioteki STL
- 19.2. Sekwencje i iteratory
- 19.2.1. Powrót do przykładu Jacka i Agatki
- 19.3. Listy powiązane
- 19.3.1. Operacje list
- 19.3.2. Iteracja
- 19.4. Jeszcze raz uogólnianie wektora
- 19.4.1. Przeglądanie kontenera
- 19.4.2. Funkcje insert() i erase()
- 19.4.3. Dostosowanie wektora do biblioteki STL
- 19.5. Przykład: prosty edytor tekstu
- 19.5.1. Wiersze
- 19.5.2. Iteracja
- 19.6. Typy vector, list oraz string
- 19.1. Przechowywanie i przetwarzanie danych
- 20. Słowniki i zbiory
- 20.1. Kontenery asocjacyjne
- 20.2. Słowniki
- 20.2.1. Wiązanie strukturalne
- 20.2.2. Opis ogólny słownika
- 20.2.3. Jeszcze jeden przykład zastosowania słownika
- 20.3. Kontener unordered_map
- 20.4. Czas
- 20.4.1. Daty
- 20.5. Zbiory
- 20.6. Przegląd kontenerów
- 20.6.1. "Prawie kontenery"
- 20.6.2. Kontener array
- 20.6.3. Dostosowywanie wbudowanych tablic do STL
- 20.6.4. Dostosowywanie strumieni wejścia/wyjścia do biblioteki STL
- 20.6.5. Utrzymywanie porządku przy użyciu kontenera set
- 20.7. Zakresy i iteratory
- 20.7.1. Kategorie iteratorów
- 20.7.2. Zakresy wyjściowe
- 21. Algorytmy
- 21.1. Algorytmy biblioteki standardowej
- 21.1.1. Najprostszy algorytm: find()
- 21.1.2. Kilka przykładów z programowania ogólnego
- 21.1.3. Ogólny algorytm wyszukiwania: find_if()
- 21.2. Obiekty funkcyjne
- 21.2.1. Abstrakcyjne spojrzenie na obiekty funkcyjne
- 21.2.2. Predykaty składowych klas
- 21.2.3. Wyrażenia lambda
- 21.3. Algorytmy numeryczne
- 21.3.1. Akumulacja
- 21.3.2. Uogólnianie funkcji accumulate()
- 21.3.3. Iloczyn skalarny
- 21.3.4. Uogólnianie funkcji inner_product()
- 21.4. Kopiowanie
- 21.4.1. Najprostsza wersja funkcji copy()
- 21.4.2. Uogólnianie funkcji copy_if()
- 21.5. Sortowanie i wyszukiwanie
- Ćwiczenia
- Powtórzenie
- Terminologia
- Praca domowa
- Podsumowanie
- 21.1. Algorytmy biblioteki standardowej
Skorowidz
| Kategoria: | Programowanie |
| Zabezpieczenie: |
Watermark
|
| ISBN: | 978-83-289-2998-2 |
| Rozmiar pliku: | 9,5 MB |