Kostenlos testen
Searching...
SoBrief
Deutsch
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Die C++-Programmiersprache

Die C++-Programmiersprache

von Bjarne Stroustrup 1986 1030 Seiten
4.10
4.000+ Bewertungen
Anhören
14 Minuten
3 Tage Vollzugriff testen
Schalten Sie Audioinhalte & mehr frei!
Weiter

Wichtigste Erkenntnisse

1. C++: Eine Sprache für elegante und effiziente Abstraktionen

C++ ist eine Sprache, die elegante und effiziente Abstraktionen ermöglicht.

Duale Natur. C++ wurde entwickelt, um die Kluft zwischen niedrigstufigem Hardwarezugriff und hochstufigen Problemfeldern zu überbrücken. Es übernimmt die Effizienz von C für die Systemprogrammierung und ergänzt diese um mächtige Abstraktionsmechanismen, inspiriert von Simula. Ziel ist es, eine Sprache zu bieten, die sowohl leistungsfähig als auch ausdrucksstark ist und es Programmierern erlaubt, Konzepte direkt im Code abzubilden.

  • Direkte Abbildung auf Hardware
  • Leistbare Abstraktionsmechanismen
  • Allgemein einsetzbare Sprache
  • Schwerpunkt auf Systemprogrammierung

Null Overhead. Ein zentrales Prinzip von C++ ist das „Zero-Overhead-Prinzip“: Man zahlt nicht für das, was man nicht nutzt. Sprachfeatures und grundlegende Abstraktionen sind so gestaltet, dass sie mindestens so effizient sind wie handgeschriebener Code. Das ist entscheidend für leistungs- und ressourcen-kritische Anwendungen.

  • Effizienz steht an erster Stelle
  • Keine versteckten Kosten für ungenutzte Features
  • Ermöglicht Einsatz in ressourcenbeschränkten Umgebungen

Ideen ausdrücken. Die Sprache unterstützt Programmierer dabei, Ideen klar und direkt im Code auszudrücken. Das bedeutet, Konzepte als Typen, Beziehungen als Hierarchien oder Parametrisierungen und unabhängige Ideen getrennt darzustellen. Die Kombination verschiedener Programmierparadigmen wird gefördert, um optimale Lösungen zu erzielen.

  • Ideen direkt ausdrücken
  • Beziehungen abbilden
  • Unabhängige Ideen getrennt halten
  • Einfache Ideen einfach umsetzen

2. Modernes C++ (C++11) – eine bessere Sprache

C++ fühlt sich an wie eine neue Sprache.

Bedeutende Weiterentwicklung. Die Sprache C++ hat sich im Laufe der Jahre stark weiterentwickelt, besonders mit dem Standard C++11. Diese Neuerungen machen C++ zu einem deutlich mächtigeren und ausgereifteren Werkzeug für hochwertige Softwareentwicklung. Modernes C++ ermöglicht eine klarere, einfachere und direktere Ausdrucksweise.

  • C++11 im Vergleich zu C++98
  • Erhöhte Ausdruckskraft
  • Verbesserte Sicherheit und Performance

Wichtige Features. C++11 brachte zahlreiche Neuerungen, die die Art und Weise, wie C++ programmiert wird, grundlegend verändert haben. Dazu zählen bessere Unterstützung für Nebenläufigkeit, Ressourcenmanagement und generische Programmierung sowie syntaktische Erleichterungen, die Boilerplate reduzieren.

  • Nebenläufigkeit (std::thread, std::mutex)
  • Move-Semantik (std::move, Rvalue-Referenzen)
  • Smart Pointer (unique_ptr, shared_ptr)
  • Lambdas
  • auto und constexpr
  • Initializer-Listen

Moderne Stile übernehmen. Programmierer werden dringend ermutigt, moderne C++-Features und -Stile zu nutzen. Das Festhalten an älteren C++98- oder C-Stilen führt zu weniger wartbarem, weniger performantem und qualitativ schlechterem Code. Der Standard garantiert zwar Abwärtskompatibilität, doch Fortschritt ist unvermeidlich.

3. Klassen: Das Fundament der Abstraktion

Das zentrale Sprachmerkmal von C++ ist die Klasse.

Benutzerdefinierte Typen. Klassen sind das Hauptmittel, um benutzerdefinierte Typen zu schaffen, die Konzepte aus der Problemwelt direkt im Code repräsentieren. Eine wohlüberlegte Klassenauswahl macht Programme verständlicher, leichter nachvollziehbar und einfacher zu ändern.

  • Konzepte als Typen darstellen
  • Grundlage für Abstraktionsmechanismen
  • Erhöht Klarheit und Wartbarkeit

Kapselung. Klassen ermöglichen die Trennung zwischen öffentlicher Schnittstelle (was Nutzer sehen und verwenden) und privater Implementierung (Daten und Hilfsfunktionen). Das erzwingt Datenkapselung, garantiert konsistente Datennutzung und erlaubt Änderungen an der Implementierung ohne Auswirkungen auf den Nutzercode.

  • Öffentliche Schnittstelle
  • Private Implementierung
  • Datenkapselung
  • Trennung der Verantwortlichkeiten

Konstruktoren und Destruktoren. Konstruktoren definieren, wie Objekte initialisiert werden, und sorgen dafür, dass sie bei Erstellung in einem gültigen Zustand sind. Destruktoren regeln die Aufräumarbeiten beim Objektzerfall, was für das Ressourcenmanagement essenziell ist. Dieses Konstruktor-/Destruktor-Paar bildet die Grundlage für Techniken wie RAII.

  • Garantierte Initialisierung
  • Ressourcenakquise (Konstruktoren)
  • Ressourcenfreigabe (Destruktoren)
  • Klasseninvarianten

4. Ressourcenmanagement: RAII und Smart Pointer

Die Kombination aus Konstruktor und Destruktor ist die Basis vieler eleganter Techniken.

RAII-Prinzip. Resource Acquisition Is Initialization (RAII) ist eine fundamentale C++-Technik, bei der der Erwerb von Ressourcen an die Objektinitialisierung (Konstruktor) und die Freigabe an die Objektzerstörung (Destruktor) gebunden ist. So werden Ressourcen auch bei Ausnahmen oder vorzeitigem Funktionsende zuverlässig verwaltet.

  • Ressourcenakquise im Konstruktor
  • Ressourcenfreigabe im Destruktor
  • Automatisches Aufräumen beim Verlassen des Gültigkeitsbereichs
  • Ausnahme-Sicherheit

Lecks vermeiden. RAII verhindert Ressourcenlecks (z. B. Speicherlecks) und andere Fehler im Ressourcenmanagement (zu frühe oder doppelte Freigabe). Indem die Ressourcenzuständigkeit in Objekten gekapselt wird, übernimmt der Compiler die Aufräumarbeiten automatisch.

  • Vermeidet „nacktes“ new und delete
  • Verhindert Speicherlecks
  • Handhabt Dateien, Locks, Threads usw.

Smart Pointer. unique_ptr und shared_ptr sind Smart Pointer aus der Standardbibliothek, die RAII nutzen, um dynamisch allozierten Speicher zu verwalten. unique_ptr bietet exklusive Besitzrechte, shared_ptr teilt Besitz mittels Referenzzählung. Sie sind der manuelle Speicherverwaltung mit rohen Zeigern vorzuziehen.

  • unique_ptr (exklusiver Besitz)
  • shared_ptr (geteilter Besitz)
  • Automatische Speicherfreigabe
  • Vermeidet manuelle delete-Aufrufe

5. Templates: Ermöglichen generische Programmierung

Ein Template ist eine Klasse oder Funktion, die wir mit Typen oder Werten parametrieren.

Kompilierzeit-Parametrisierung. Templates erlauben es, Klassen, Funktionen und Typalias mit Typen, Werten oder anderen Templates zu parametrisieren. So entsteht Code, der mit verschiedenen Typen funktioniert, ohne an Performance einzubüßen.

  • Parametrisierung nach Typ oder Wert
  • Kompilierzeit-Polymorphismus
  • Code-Generierung

Generische Programmierung. Templates bilden die Grundlage der generischen Programmierung in C++, die Algorithmen und Datenstrukturen entwirft, die mit beliebigen Typen funktionieren, sofern diese bestimmte Anforderungen (Konzepte) erfüllen. So entsteht wiederverwendbarer, typsicherer und effizienter Code.

  • Allgemeine Algorithmen entwerfen
  • Mit verschiedenen Typen arbeiten
  • Konzepte (Anforderungen an Argumente)

Effizienz. Templates sind ein Kompilierzeit-Mechanismus, der in der Regel keinen Laufzeit-Overhead verursacht im Vergleich zu handgeschriebenem Code. Dies wird durch Inlining und Kompilierzeit-Berechnungen erreicht.

  • Kein Laufzeit-Overhead
  • Ermöglicht Inlining
  • Kompilierzeit-Berechnung

6. Die Standardbibliothek: Ihr unverzichtbares Werkzeug

Kein bedeutendes Programm entsteht allein in einer nackten Programmiersprache.

Unverzichtbare Komponenten. Die Standardbibliothek stellt eine umfassende Sammlung grundlegender Bausteine bereit, die für fast jedes C++-Programm essenziell sind. Dazu gehören Container, Algorithmen, Ein-/Ausgabefunktionen, Hilfsmittel und Unterstützung für Nebenläufigkeit.

  • Container (vector, list, map, set)
  • Algorithmen (sort, find, copy, unique)
  • I/O-Streams (cin, cout, cerr)
  • Hilfsmittel (pair, tuple, Smart Pointer, Zeitfunktionen)
  • Nebenläufigkeitsunterstützung

Fundament. Die Standardbibliothek ist selbst in C++ geschrieben, was die Leistungsfähigkeit der Sprache demonstriert und als Vorbild für gutes C++-Design dient. Sie bildet eine gemeinsame Basis für weitere Bibliotheken und Anwendungen und fördert Portabilität und Interoperabilität.

  • In C++ implementiert
  • Vorbild für gutes Design
  • Fördert Portabilität
  • Ermöglicht Interoperabilität

Standard bevorzugen. Programmierer werden dringend angehalten, Standardbibliothekskomponenten zu verwenden, anstatt das Rad neu zu erfinden. Standardkomponenten sind gut gestaltet, optimiert, weit verbreitet und bekannt, was Wartungskosten senkt und die Codequalität verbessert.

  • Rad nicht neu erfinden
  • Gut gestaltet und optimiert
  • Weit verbreitet und bekannt

7. Nebenläufigkeit: Eingebaute Unterstützung für Parallelität

Nebenläufigkeit – die gleichzeitige Ausführung mehrerer Aufgaben – wird häufig genutzt, um Durchsatz zu erhöhen (durch Nutzung mehrerer Prozessoren für eine Berechnung) oder Reaktionsfähigkeit zu verbessern (indem ein Programmteil fortschreitet, während ein anderer auf eine Antwort wartet).

Modernes Feature. C++ bietet robuste, portable und typsichere Unterstützung für nebenläufige Programmierung, um den Anforderungen moderner Mehrkern-Hardware gerecht zu werden. Dies ist eine bedeutende Neuerung in C++11.

  • Eingebaute Unterstützung
  • Portabel und typsicher
  • Für Mehrkernprozessoren

Threads und Tasks. Die Bibliothek stellt niedrigstufige Thread-Verwaltung (std::thread) und höherstufige taskbasierte Abstraktionen (std::future, std::async) bereit. Threads teilen sich einen Adressraum, was sorgfältige Synchronisation erfordert, um Datenrennen zu vermeiden.

  • std::thread für System-Threads
  • Gemeinsamer Adressraum
  • Task-basierte Nebenläufigkeit (std::async)

Synchronisation. Mechanismen wie Mutexes (std::mutex) und Bedingungsvariablen (std::condition_variable) steuern den Zugriff auf gemeinsame Daten und synchronisieren Threads. Atomare Operationen bieten feinkörnige, sperrfreie Synchronisation für einfache Typen.

  • Mutexes und Locks
  • Bedingungsvariablen
  • Atomare Operationen
  • Vermeidung von Datenrennen

8. Typen und Grundlegende Einrichtungen meistern

Jeder Name und jeder Ausdruck hat einen zugehörigen Typ.

Grundbausteine. Das Verständnis der eingebauten Typen (int, double, char, bool), der Variablendeklaration, der Gültigkeitsbereiche und der grundlegenden Kontrollstrukturen (if, switch, for, while) ist essenziell. Diese Elemente, aus C übernommen und erweitert, bilden die Basis aller C++-Programme.

  • Eingebaute Typen
  • Deklarationen und Gültigkeitsbereiche
  • Kontrollstrukturen
  • Ausdrücke und Operatoren

Typsicherheit. C++ ist statisch typisiert, das heißt, Typen werden zur Kompilierzeit geprüft. Das hilft, Fehler früh zu erkennen. Features wie auto für Typinferenz und constexpr für Kompilierzeit-Konstanten erhöhen Typsicherheit und Ausdruckskraft.

  • Statische Typprüfung
  • Früherkennung von Fehlern
  • auto für Typinferenz
  • constexpr für Kompilierzeit-Konstanten

Zeiger und Referenzen. C++ bietet Zeiger und Referenzen für indirekten Speicherzugriff. Diese sind mächtig, erfordern aber sorgfältige Handhabung, besonders bei Ressourcenbesitz. Smart Pointer sind rohen Zeigern bei der Speicherverwaltung vorzuziehen.

  • Zeiger und Referenzen
  • Indirekter Speicherzugriff
  • Smart Pointer für Besitzverwaltung

9. Programmierparadigmen kombinieren für effektive Lösungen

Die beste (wartbarste, lesbarste, kleinste, schnellste usw.) Lösung für die meisten nicht-trivialen Probleme kombiniert oft Aspekte verschiedener Programmierparadigmen.

Synthese statt Exklusivität. C++ unterstützt mehrere Programmierparadigmen: prozedurale, Datenabstraktion, objektorientierte und generische Programmierung. Die Sprache erlaubt deren Kombination, und die effektivsten Lösungen mischen Techniken aus mehreren Paradigmen.

  • Prozedurale Programmierung
  • Datenabstraktion
  • Objektorientierte Programmierung
  • Generische Programmierung

Dogmen vermeiden. Sich ausschließlich auf einen Stil zu beschränken oder C++ als „Hybrid“ zu sehen, verkennt die Stärke seiner Synthese. Die Sprache bietet Werkzeuge, die elegant kombiniert werden können, um vielfältige Techniken zu unterstützen.

  • Sprache unterstützt Kombinationen
  • Ein-Paradigmen-Denken vermeiden

Praktisches Design. Effektives C++-Programmieren bedeutet, die richtigen Werkzeuge (Sprachfeatures, Standardbibliothek) aus dem verfügbaren Set auszuwählen und passend zu kombinieren. Das erfordert Verständnis der Stärken und Schwächen verschiedener Ansätze und ihres Zusammenspiels.

  • Die richtigen Werkzeuge wählen
  • Features effektiv kombinieren
  • Fokus auf Design und Techniken

10. Fehlerbehandlung: Ausnahmen und Garantien

Das Konzept der Ausnahme dient dazu, Informationen vom Ort der Fehlererkennung zu einem Ort der Fehlerbehandlung zu transportieren.

Trennung der Anliegen. Ausnahmen (throw, catch) bieten einen Mechanismus, um den Code, der einen Fehler erkennt, vom Code zu trennen, der ihn behandelt. Das ist besonders in großen Programmen und Bibliotheken nützlich, wo der Erkennende nicht weiß, wie er sich erholen soll, und der Behandler den Fehler nicht direkt erkennen kann.

  • throw zum Melden von Fehlern
  • catch zur Fehlerbehandlung
  • Entkopplung von Erkennung und Behandlung

Ausnahmesicherheit. Die Standardbibliothek garantiert Zustände von Objekten bei Ausnahmen. Die Basisgarantie sichert Invarianten und verhindert Ressourcenlecks. Die starke Garantie stellt sicher, dass Operationen entweder erfolgreich sind oder keine Wirkung haben.

  • Basisgarantie (keine Lecks, gültiger Zustand)
  • Starke Garantie (Alles oder Nichts)
  • noexcept-Spezifizierer

Integration mit RAII. Die Fehlerbehandlung ist eng mit RAII verknüpft. So werden Ressourcen, die von Objekten erworben wurden, beim Stack-Unwinding bei Ausnahmeausbreitung korrekt freigegeben, was Lecks verhindert und Aufräumcode vereinfacht.

  • RAII für Aufräumarbeiten
  • Destruktoren werden beim Stack-Unwinding aufgerufen

Zuletzt aktualisiert:

Report Issue

Rezensionsübersicht

4.10 von 5
Durchschnitt von 4.000+ Bewertungen von Goodreads und Amazon.

Die Programmiersprache C++ gilt als das maßgebliche Standardwerk für C++, verfasst vom Schöpfer der Sprache selbst. Obwohl das Buch für seine umfassende Darstellung und wertvollen Einblicke gelobt wird, weisen viele Rezensenten darauf hin, dass es sich nicht für Einsteiger eignet. Es wird als dicht und mitunter ausführlich beschrieben und empfiehlt sich eher als Nachschlagewerk denn als Lernhilfe. Erfahrene Programmierer schätzen die Tiefe und technischen Details, während einige den Schreibstil und die Struktur kritisieren. Dennoch gilt das Buch insgesamt als unverzichtbare Ressource für Profis, stellt jedoch für Neulinge eine Herausforderung dar.

Your rating:
4.49
125 Bewertungen
Want to read the full book?

Über den Autor

Bjarne Stroustrup ist ein dänischer Informatiker, der vor allem als Schöpfer der Programmiersprache C++ bekannt ist. Er entwickelte C++ im Jahr 1979 bei Bell Labs mit dem Ziel, die Sprache C um Funktionen für die Programmierung größerer Systeme zu erweitern. Stroustrup spielte eine entscheidende Rolle bei der Weiterentwicklung der Sprache, verfasste mehrere Auflagen seines Standardwerks „The C++ Programming Language“ und trug maßgeblich zur ISO-C++-Norm bei. Für seine Arbeit wurde er mit zahlreichen Auszeichnungen geehrt, darunter der Computer Entrepreneur Award der IEEE Computer Society. Stroustrup hatte Lehrstühle an der Texas A&M University und der Columbia University inne und prägt bis heute das Fachgebiet der Informatik sowie das Design von Programmiersprachen.

Follow
Anhören14 Min.
Now playing
Die C++-Programmiersprache
0:00
-0:00
Now playing
Die C++-Programmiersprache
0:00
-0:00
1x
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Heute: Sofortzugang erhalten
Vollständige Zusammenfassungen von über 26.000 Büchern anhören. Das sind über 12.000 Stunden Audio!
Tag 2: Erinnerung an Testphase
Wir senden Ihnen eine Benachrichtigung, dass Ihre Testphase bald endet.
Tag 3: Ihr Abonnement beginnt
Die Abbuchung erfolgt am Jun 13,
vorher jederzeit kündbar.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel