Facebook - konwersja
Darmowy fragment

  • nowość

Programowanie. Teoria i praktyka w C++ - ebook

Wydawnictwo:
Tłumacz:
Format:
PDF
Data wydania:
20 stycznia 2026
149,00
14900 pkt
punktów Virtualo

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
  • 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
  • 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
  • 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
  • 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

Skorowidz

Kategoria: Programowanie
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-289-2998-2
Rozmiar pliku: 9,5 MB

BESTSELLERY

Menu

Zamknij