Will | C++ | E-Book | sack.de
E-Book

E-Book, Deutsch, 1172 Seiten

Reihe: Rheinwerk Computing

Will C++

Das umfassende Handbuch
3. Auflage 2024
ISBN: 978-3-8362-9855-1
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection

Das umfassende Handbuch

E-Book, Deutsch, 1172 Seiten

Reihe: Rheinwerk Computing

ISBN: 978-3-8362-9855-1
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection



Dieses Standardwerk führt Sie in die moderne C++-Entwicklung ein. Entwickeln Sie Software mit hohen Ansprüchen an Funktionalität, Effizienz und Sicherheit. Ausführlich werden der Sprachkern, die objektorientierte Programmierung und die Standardbibliothek behandelt. Sie lernen zum Beispiel, mit Streams umzugehen, Containertypen zu nutzen und nebenläufige Anwendungen zu entwicklen.
Nicht zuletzt geht es dem Autor um das Wie: Freuen Sie sich auf ein Lehrbuch über die Konzepte des Modern C++, die C++ Core Guidelines, Sprachversionen und vor allem über guten Code.

Aus dem Inhalt:

  • Sprachgrundlagen
  • Fehlerbehandlung
  • Objektorientierte Programmierung
  • Zeiger
  • Schnittstelle zu C
  • Templates
  • Container
  • Standardbibliothek
  • C++ Core Guidelines
  • Extra: Tutorials zum Thema 'guter Code'


Torsten T. Will, Jahrgang 1970, beschäftigte sich bereits während seines Diploms in Informatik mit Programmiersprachen und ihren Konzepten. C++ hat ihn schon in seinen Anfängen fasziniert und begleitet. Andere Programmierprojekte bewältigte er vor allem in Pascal, Java, Scala und Python. Seit 2004 schreibt er im Fachmagazin c't gelegentlich über C++ und Python. Was dann noch an Zeit übrig bleibt, geht in die Fotografie.
Will C++ jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material


Vorwort ... 25

TEIL I.  Grundlagen ... 29  1.  Das C++-Handbuch ... 31  1.1 ... Neu und modern ... 32  1.2 ... »Dan«-Kapitel ... 32  1.3 ... Darstellung in diesem Buch ... 33  1.4 ... Verwendete Formatierungen ... 33  1.5 ... Sorry for my Denglish ... 34  2.  Programmieren in C++ ... 37  2.1 ... Übersetzen ... 38  2.2 ... Übersetzungsphasen ... 39  2.3 ... Aktuelle Compiler ... 40  2.4 ... Entwicklungsumgebungen ... 41  2.5 ... Die Kommandozeile unter Ubuntu ... 43  2.6 ... Die IDE »Visual Studio Code« unter Windows ... 47  2.7 ... Das Beispielprogramm beschleunigen ... 54  3.  C++ für Umsteiger ... 55  4.  Die Grundbausteine von C++ ... 63  4.1 ... Ein schneller Überblick ... 66  4.2 ... Ohne Eile erklärt ... 71  4.3 ... Operatoren ... 100  4.4 ... Eingebaute Datentypen ... 116  4.5 ... Undefiniertes und unspezifiziertes Verhalten ... 157  5.  Guter Code, 1. Dan: Lesbar programmieren ... 159  5.1 ... Kommentare ... 160  5.2 ... Dokumentation ... 160  5.3 ... Einrückungen und Zeilenlänge ... 161  5.4 ... Zeilen pro Funktion und Datei ... 162  5.5 ... Klammern und Leerzeichen ... 163  5.6 ... Namen ... 164  6.  Höhere Datentypen ... 167  6.1 ... Der Zeichenkettentyp »string« ... 168  6.2 ... Streams ... 174  6.3 ... Behälter und Zeiger ... 181  6.4 ... Die einfachen Sequenzcontainer ... 183  6.5 ... Algorithmen ... 189  6.6 ... Zeiger und C-Arrays ... 189  7.  Funktionen ... 191  7.1 ... Deklaration und Definition einer Funktion ... 192  7.2 ... Funktionstyp ... 193  7.3 ... Funktionen verwenden ... 194  7.4 ... Eine Funktion definieren ... 195  7.5 ... Mehr zu Parametern ... 197  7.6 ... Funktionskörper ... 201  7.7 ... Parameter umwandeln ... 203  7.8 ... Funktionen überladen ... 205  7.9 ... Defaultparameter ... 208  7.10 ... Beliebig viele Argumente ... 209  7.11 ... Alternative Schreibweise zur Funktionsdeklaration ... 210  7.12 ... Spezialitäten ... 211  8.  Anweisungen im Detail ... 215  8.1 ... Der Anweisungsblock ... 218  8.2 ... Die leere Anweisung ... 221  8.3 ... Deklarationsanweisung ... 221  8.4 ... Die Ausdrucksanweisung ... 224  8.5 ... Die »if«-Anweisung ... 224  8.6 ... Die »while«-Schleife ... 229  8.7 ... Die »do-while«-Schleife ... 231  8.8 ... Die »for«-Schleife ... 232  8.9 ... Die bereichsbasierte »for«-Schleife ... 234  8.10 ... Die »switch«-Verzweigung ... 236  8.11 ... Die »break«-Anweisung ... 240  8.12 ... Die »continue«-Anweisung ... 241  8.13 ... Die »return«-Anweisung ... 242  8.14 ... Die »goto«-Anweisung ... 243  8.15 ... Der »try-catch«-Block und »throw« ... 245  8.16 ... Zusammenfassung ... 247  9.  Ausdrücke im Detail ... 249  9.1 ... Berechnungen und Seiteneffekte ... 250  9.2 ... Arten von Ausdrücken ... 251  9.3 ... Literale ... 253  9.4 ... Bezeichner ... 253  9.5 ... Klammern ... 254  9.6 ... Funktionsaufruf und Indexzugriff ... 254  9.7 ... Zuweisung ... 255  9.8 ... Typumwandlung ... 257

10.  Fehlerbehandlung ... 259  10.1 ... Fehlerbehandlung mit Fehlercodes ... 261  10.2 ... Was ist eine Ausnahme? ... 264  10.3 ... Kleinere Fehlerbehandlungen ... 267  10.4 ... Weiterwerfen -- »rethrow« ... 268  10.5 ... Die Reihenfolge im »catch« ... 268  10.6 ... Typen für Exceptions ... 271  10.7 ... Wenn eine Exception aus »main« herausfällt ... 272

11.  Guter Code, 2. Dan: Modularisierung ... 273  11.1 ... Programm, Bibliothek, Objektdatei ... 273  11.2 ... Bausteine ... 274  11.3 ... Trennen der Funktionalitäten ... 275  11.4 ... Ein modulares Beispielprojekt ... 277

TEIL II.  Objektorientierte Programmierung und mehr ... 289

12.  Von der Struktur zur Klasse ... 291  12.1 ... Initialisierung ... 294  12.2 ... Rückgabe eigener Typen ... 295  12.3 ... Methoden statt Funktionen ... 297  12.4 ... Das bessere »drucke« ... 300  12.5 ... Eine Ausgabe wie jede andere ... 302  12.6 ... Methoden inline definieren ... 303  12.7 ... Implementierung und Definition trennen ... 304  12.8 ... Initialisierung per Konstruktor ... 305  12.9 ... Struktur oder Klasse? ... 313  12.10 ... Zwischenergebnis ... 318  12.11 ... Eigene Datentypen verwenden ... 318  12.12 ... Typinferenz mit »auto« ... 335  12.13 ... Eigene Klassen in Standardcontainern ... 339

13.  Namensräume und Qualifizierer ... 343  13.1 ... Der Namensraum »std« ... 344  13.2 ... Anonymer Namensraum ... 347  13.3 ... »static« macht lokal ... 349  13.4 ... »static« teilt gern ... 350  13.5 ... Ferne Initialisierung oder »static inline«-Datenfelder ... 353  13.6 ... Garantiert zur Compilezeit initialisiert mit »constinit« ... 354  13.7 ... »static« macht dauerhaft ... 354  13.8 ... »inline namespace« ... 356  13.9 ... Zusammenfassung ... 358  13.10 ... »const« ... 358  13.11 ... Flüchtig mit »volatile« ... 380

14.  Guter Code, 3. Dan: Testen ... 383  14.1 ... Arten des Tests ... 383  14.2 ... Frameworks ... 391  14.3 ... Boost.Test ... 396  14.4 ... Hilfsmakros für Assertions ... 400  14.5 ... Ein Beispielprojekt mit Unittests ... 403

15.  Vererbung ... 417  15.1 ... Beziehungen ... 418  15.2 ... Vererbung in C++ ... 421  15.3 ... Hat-ein versus ist-ein ... 422  15.4 ... Gemeinsamkeiten finden ... 422  15.5 ... Abgeleitete Typen erweitern ... 425  15.6 ... Methoden überschreiben ... 426  15.7 ... Wie Methoden funktionieren ... 427  15.8 ... Virtuelle Methoden ... 429  15.9 ... Konstruktoren in Klassenhierarchien ... 431  15.10 ... Typumwandlung in Klassenhierarchien ... 433  15.11 ... Wann virtuell? ... 434  15.12 ... Andere Designs zur Erweiterbarkeit ... 436

16.  Der Lebenszyklus von Klassen ... 439  16.1 ... Erzeugung und Zerstörung ... 440  16.2 ... Temporary: kurzlebige Werte ... 442  16.3 ... Der Destruktor zum Konstruktor ... 444  16.4 ... Yoda-Bedingung ... 449  16.5 ... Konstruktion, Destruktion und Exceptions ... 450  16.6 ... Kopieren ... 452  16.7 ... Zuweisungsoperator ... 455  16.8 ... Streichen von Methoden ... 459  16.9 ... Verschiebeoperationen ... 461  16.10 ... Operatoren ... 466  16.11 ... Eigene Operatoren in einem Datentyp ... 470  16.12 ... Besondere Klassenformen ... 478

17.  Guter Code, 4. Dan: Sicherheit, Qualität und Nachhaltigkeit ... 483  17.1 ... Die Nullerregel ... 483  17.2 ... RAII -- Resource Acquisition Is Initialization ... 489

18.  Spezielles für Klassen ... 499  18.1 ... Dürfen alles sehen -- »friend«-Klassen ... 499  18.2 ... Non-public-Vererbung ... 504  18.3 ... Signaturklassen als Interfaces ... 510  18.4 ... Multiple Vererbung ... 514  18.5 ... Rautenförmige multiple Vererbung -- »virtual« für Klassenhierarchien ... 524  18.6 ... Literale Datentypen -- »constexpr« für Konstruktoren ... 528

19.  Guter Code, 5. Dan: Klassisches objektorientiertes Design ... 531  19.1 ... Objekte in C++ ... 533  19.2 ... Objektorientiert designen ... 534

TEIL III.  Fortgeschrittene Themen ... 555

20.  Zeiger ... 557  20.1 ... Adressen ... 558  20.2 ... Zeiger ... 560  20.3 ... Gefahren von Aliasing ... 562  20.4 ... Heapspeicher und Stapelspeicher ... 563  20.5 ... Smarte Pointer ... 567  20.6 ... Rohe Zeiger ... 576  20.7 ... C-Arrays ... 582  20.8 ... Iteratoren ... 588  20.9 ... Zeiger als Iteratoren ... 590  20.10 ... Zeiger im Container ... 590  20.11 ... Die Ausnahme: wann das Wegräumen nicht nötig ist ... 591

21.  Makros ... 595  21.1 ... Der Präprozessor ... 596  21.2 ... Vorsicht vor fehlenden Klammern ... 600  21.3 ... Featuremakros ... 601  21.4 ... Information über den Quelltext ... 602  21.5 ... Warnung vor Mehrfachausführung ... 603  21.6 ... Typvariabilität von Makros ... 604  21.7 ... Zusammenfassung ... 607

22.  Schnittstelle zu C ... 609  22.1 ... Mit Bibliotheken arbeiten ... 610  22.2 ... C-Header ... 611  22.3 ... C-Ressourcen ... 614  22.4 ... »void«-Pointer ... 615  22.5 ... Daten lesen ... 616  22.6 ... Das Hauptprogramm ... 617  22.7 ... Zusammenfassung ... 618

23.  Templates ... 619  23.1 ... Funktionstemplates ... 621  23.2 ... Funktionstemplates in der Standardbibliothek ... 631  23.3 ... Eine Klasse als Funktion ... 637  23.4 ... C++ Concepts ... 654  23.5 ... Templateklassen ... 662  23.6 ... Templates mit variabler Argumentanzahl ... 677  23.7 ... Eigene Literale ... 681

TEIL IV.  Die Standardbibliothek ... 693

24.  Container ... 695  24.1 ... Grundlagen ... 696  24.2 ... Iteratoren-Grundlagen ... 709  24.3 ... Allokatoren: Speicherfragen ... 714  24.4 ... Containergemeinsamkeiten ... 717  24.5 ... Ein Überblick über die Standardcontainerklassen ... 719  24.6 ... Die sequenziellen Containerklassen ... 723  24.7 ... Assoziativ und geordnet ... 769  24.8 ... Nur assoziativ und nicht garantiert ... 805  24.9 ... Containeradapter ... 837  24.10 ... Sonderfälle: »string«, »basic_string« und »vector« ... 840  24.11 ... Sonderfälle: »vector«, »array« und »bitset« ... 842  24.12 ... Sonderfall: Value-Array mit »valarray<>« ... 845

25.  Containerunterstützung ... 855  25.1 ... Algorithmen ... 857  25.2 ... Iteratoren und Ranges ... 858  25.3 ... Iteratoradapter ... 860  25.4 ... Algorithmen der Standardbibliothek ... 861  25.5 ... Parallele Ausführung ... 863  25.6 ... Liste der Algorithmusfunktionen und Range-Adapter ... 866  25.7 ... Elemente verknüpfende Algorithmen aus »« und »« ... 892  25.8 ... Kopie statt Zuweisung -- Werte in uninitialisierten Speicherbereichen ... 899  25.9 ... Eigene Algorithmen ... 901  25.10 ... Eigene Views und Range-Adapter schreiben ... 903

26.  Guter Code, 6. Dan: Für jede Aufgabe der richtige Container ... 907  26.1 ... Alle Container nach Aspekten sortiert ... 907  26.2 ... Rezepte für Container ... 913  26.3 ... Algorithmen je nach Container unterschiedlich implementieren ... 919

27.  Streams, Dateien und Formatierung ... 921  27.1 ... Ein- und Ausgabekonzept mit Streams ... 922  27.2 ... Globale, vordefinierte Standardstreams ... 922  27.3 ... Methoden für die Aus- und Eingabe von Streams ... 925  27.4 ... Fehlerbehandlung und Zustand von Streams ... 929  27.5 ... Streams manipulieren und formatieren ... 933  27.6 ... Streams für die Dateiein- und Dateiausgabe ... 945  27.7 ... Streams für Strings ... 961  27.8 ... Streampuffer ... 966  27.9 ... »filesystem« ... 969  27.10 ... Formatieren ... 971

28.  Standardbibliothek -- Extras ... 979  28.1 ... »pair« und »tuple« ... 979  28.2 ... Reguläre Ausdrücke ... 987  28.3 ... Zufall ... 997  28.4 ... Mathematisches ... 1006  28.5 ... Systemfehlerbehandlung mit »system_error« ... 1033  28.6 ... Laufzeittypinformationen -- »« und »« ... 1043  28.7 ... Hilfsklassen rund um Funktoren -- »« ... 1047  28.8 ... »optional« für einen oder keinen Wert ... 1055  28.9 ... »variant« für einen von mehreren Typen ... 1056  28.10 ... »any« hält jeden Typ ... 1058  28.11 ... Spezielle mathematische Funktionen ... 1059  28.12 ... Schnelle Umwandlung mit »« ... 1060

29.  Threads -- Programmieren mit Mehrläufigkeit ... 1063  29.1 ... C++-Threading-Grundlagen ... 1064  29.2 ... Gemeinsame Daten ... 1082  29.3 ... Andere Möglichkeiten zur Synchronisation ... 1100  29.4 ... Im eigenen Speicher mit »thread_local« ... 1104  29.5 ... Mit »condition_variable« auf Ereignisse warten ... 1105  29.6 ... Einmal warten mit »future« ... 1110  29.7 ... Atomics ... 1122  29.8 ... Koroutinen ... 1127  29.9 ... Zusammenfassung ... 1133  A.  Guter Code, 7. Dan: Richtlinien ... 1137  A.1 ... Guideline Support Library ... 1138  A.2 ... C++ Core Guidelines ... 1139  B.  Cheat Sheet ... 1153  Index ... 1157


Vorwort


Vielen Dank, dass Sie dieses Buch erworben haben! In C++ gibt es immer wieder moderne Features, die neue Arbeitsweisen und neue Idiome ermöglichen. Fragt man »das Internet« nach Beispielen in C++, lehnen sich die meisten Quellen an den C-artigen Stil an, der aber nur noch wenig mit den Möglichkeiten des modernen C++ zu tun hat: RAII vorneweg, nun auch Concepts und Module sowie Koroutinen und Ranges. Wie immer nehme ich mir vor, Ihnen besonders die Stärken von C++ aufzuzeigen – insbesondere dort, wo ich glaube, dass C++ anderen Sprachen voraus ist.

In dieser Auflage gehe ich von einem Compiler aus, der C++17 vollständig beherrscht. Da inzwischen alle verbreiteten Compiler auch C++20 unterstützen, werden Sie mit solchen Features ebenfalls keine Probleme haben. Im Buch weise ich auf die Verwendung von C++20 meistens hin, habe aber auf Wunsch des Verlags auf eine spezielle schriftbildliche Hervorhebung verzichtet. Ich beschreibe darüber hinaus C++23-Features, auf die ich aber immer hinweise und die ich auch besonders hervorhebe, denn bei diesen ist die Compilerunterstützung bei Weitem noch nicht vollumfänglich.

Ich will Sie kurz auf C++17-Features hinweisen, die ich nicht mehr hervorhebe, die ich aber in nahezu allen Listings verwende und die Sie verwirren könnten, falls Ihr Compiler sie nicht beherrscht. Die Klassentemplate-Argumentdeduktion für Konstruktoren in vector data{1,2,3} müssen Sie noch als vector

Es gibt jedoch auch Lücken: Module sind leider noch nicht so weit, sodass ich Ihnen dazu nicht viele Tipps an die Hand geben kann. Und während format breit unterstützt wird, ist dies für print leider noch nicht der Fall.

Bei den Recherchen zu den Neuerungen in C++20 und C++23 habe ich auch die Techniken der aktuellen Zeit verwendet: Das heißt, auch ich als Autor habe ab und zu einen KI-Assistenten zurate gezogen – so wie Sie es ebenfalls tun sollten, um aktuell zu bleiben. Daher ist es vielleicht nicht selbstverständlich, dass Sie sich entschlossen haben, zu einem Buch zu greifen. Was ich aber vor allem bei der Arbeit mit den ziemlich beeindruckenden KI-Tools festgestellt habe: Sie haben ihre Grenzen. Gerade was die Neuerungen in C++20 und C++23 angeht, konnten mir die KI-Tools selten helfen. Aktuell plappern diese Werkzeuge unreflektiert nach, was das Internet seit seinem Bestehen so hergibt.

Dennoch: Sie unterstützen bei der täglichen Arbeit. Und ja, sie erstaunen mich – trotz ihrer Naivität. Ich bin mir sicher, Sie wissen, dass Sie immer skeptisch bleiben müssen bei den Antworten, die sie Ihnen geben. Immer! Und das wird in der Zukunft nicht leichter werden. Ein sehr erhellender Vortrag von Andrei Alexandrescu, der aktuell bei Nvidia arbeitet, macht in der »Closing Keynote Code Europe 2023« Vorhersagen, die mir zeigen, wohin die Reise geht: KI-Tools werden uns immer mehr unterstützen, KI wird selbstverständlicher werden, und wir werden es immer weniger bemerken – und deshalb immer weniger hinterfragen. Aber das ist natürlich gefährlich. Daher: Bleiben Sie wachsam. Und viel Spaß mit diesem Buch!

April 2024, Bielefeld

Torsten T. Will

Vorwort zur 1. Auflage


Aber selbstverständlich spricht nichts dagegen, wenn Sie Ihr Programm »traditionell« schreiben. Das heißt, kurz zusammengefasst, für mich, dass Ihr Programm mehr nach C aussieht, als es aussehen könnte. Daran ist nichts falsch, natürlich nicht. Einige der besten Programme sind in C geschrieben. Dennoch, wenn Sie heute ein Projekt beginnen und sich für eine in Maschinencode übersetzte Programmiersprache entscheiden, dann nehmen Sie doch besser C++. Denn in der Sprache tut sich etwas – oder besser, hat sich was getan. Sie haben mit C++14 (und ganz frisch C++17) eine Sprache, die Sie auf aktuelle Art und Weise darin unterstützt, gute Programme zu schreiben. Das heißt, Ihre Programme sind schnell, fehlerresistent, wartbar. Sie können produktiv programmieren.

Für dieses Buch habe ich lange überlegt, wie man C++ am besten vermittelt. Bjarne Stroustrup hat auf der C++Con 2017 eine Keynote gehalten, die genau dieses Thema zum Kern hatte. Und er sagte dort Dinge, die, so finde ich, weltbewegend sind. Zumindest, was die C++-Welt angeht. Denn er sagte: »Wir (Lehrenden) haben bis C++98 darin schlechte Arbeit geleistet, Menschen C++ beizubringen.« Und er habe sich Gedanken gemacht, warum das so war. Er schließt sich dabei mit ein und resümiert, dass die meisten C++-Bücher lang, eintönig und langsam sind. Sie brächten »bottom-up 1990-C++« bei und benutzten dabei C++11-Syntax. Und das sei verkehrt. Nun habe ich dieses Buch zu schreiben begonnen, lange bevor Bjarne Stroustrup diese Keynote gehalten hat. Und gerade deshalb fühle ich mich im ausklingenden Jahr 2017 in der Art und Weise, wie dieses Buch am Ende des Arbeitsprozesses nun aussieht, bestätigt. Denn ich sehe das genauso und habe mich von Grund auf bemüht, es anders zu machen.

Zum Beispiel werden Sie in diesem Buch Zeiger erst weit hinten erklärt bekommen. Das ist ziemlich gewagt. Zeiger sind wichtig, in C++ dreht sich vieles um Adressen – aber seit C++11 eben nicht alles. Viel wichtiger ist es, das Konzept hinter Zeigern zu verstehen, manifestiert in Iteratoren. Denn wenn man den Mechanismus versteht, kann man das Detail mit anderen Dingen kombinieren und Neues erschaffen. Ich möchte immer das Warum in den Vordergrund gestellt sehen.

Stroustrup sagt in seiner Keynote, dass das neue C++ unter anderem Ressourcensicherheit in den Vordergrund stelle. Er fragt danach, welches Buch RAII deswegen in den Vordergrund stelle? Es seien wenige. Der Begriff RAII wird Ihnen in diesem Buch mehrmals begegnen. Er kritisiert, dass viele Bücher Typsicherheit, Abstraktion, Klassendesign und generische Programmierung nicht einmal erwähnen. Dieses Buch tut es.

Mir sind aber auch Genauigkeit und Sorgfalt wichtig, und darum gibt es hier auch einen eher technischen Teil, der sich um Syntax und Semantik der kleinen und großen C++-Konstrukte kümmert. Diese kann man in einem Handbuch nicht überspringen. In einem einzelnen Projekt reicht es vielleicht, eine einzelne Regel dazu zu kennen, welche Defaultoperationen man für eine Klasse definieren sollte. In einer Architektur und für das Verständnis des Warums muss man aber wissen, welche Defaultoperationen es gibt und wie sie miteinander interagieren. Mein Ansatz ist daher, dass ich Ihnen die Dinge in drei Bissgrößen vermittle: Der erste Überblick ist in wenigen Seiten erledigt und gibt Ihnen das erste Gefühl für ein C++-Programm. Es folgt die größere Schleife, in der ich auf nahezu jedes Sprachelement kurz eingehe, damit Sie die Interaktionen verstehen: Sie lernen Ausdrücke, Typen, Anweisungen, Variablen und die Standardbibliothek kennen. Erst in der dritten Runde gehe ich in einzelnen Kapiteln auf alle diese Elemente im Detail ein. Dort finden Sie die Dinge mit Hintergrund und Interaktion mit der Welt erklärt: Bits, Bytes, Big-Endian, Fließkommaformate, Exceptions, Klassen und so weiter und so fort.

Besonders am Herzen liegen mir dabei die Kapitel über vector, map und Konsorten – also das Thema Container. Die Container der Standardbibliothek werden unterschätzt und durchweg zu wenig eingesetzt. Warum? Zurück zu Bjarne: Weil wir es nicht gut genug vermittelt haben. Ich bemühe mich hier um einen anderen Ansatz. Statt nur aufzuzählen, welche Container es gibt und was für Schnittstellen und Eigenschaften sie haben, möchte ich Ihre Aufmerksamkeit mehr die Konzepte lenken, besonders auf die Gemeinsamkeiten und Unterschiede zwischen den Containern. Sie sollen sich nicht von Beginn an alle Methoden von vector merken, sondern, was die Container können, was sie nicht können und wann Sie welchen wählen sollten. Und genau zu Letzterem habe ich deshalb noch ein eigenes Kapitel geschrieben. Wenn ein Problem gegeben ist, können Sie mit einer Referenz doch nur dann den richtigen Container finden, wenn Sie alle Containerbeschreibungen gelesen und verinnerlicht haben. Ich beschreibe also typische Probleme und stelle Ihnen Kriterien vor, nach denen Sie die passenden Container auswählen können.

Und das stellt mich immer noch nicht zufrieden. Wer C++ kann, kann nicht automatisch programmieren. Wer das neue C++ aber richtig anwendet, hat verstanden, worum es geht. Und weil »worum es geht« nicht nur in C++ wichtig ist, sondern auch in anderen Programmiersprachen, war es mir wichtig, dass Sie auch über den Tellerrand hinausschauen. Die eingestreuten Dan-Kapitel beschäftigen sich mit Dingen, die überall in der Softwareentwicklung vorkommen. Egal, ob Sie in Java, PHP oder SQL programmieren. Sie müssen testen, Ihren Code modularisieren, und in den meisten Fällen schadet es nicht, OOP zu kennen. Auf diese Punkte gehe ich ein und wende sie mit C++ an, nehmen Sie sie davon unabhängig mit auf Ihren Weg in Sachen Programmierung und Architektur.

Ich hoffe, dass ich Ihnen mit diesem Buch bei der Arbeit mit C++ helfe. Und wenn dieses Buch Ihnen hilft, C++ anzuwenden, dann wird durch Ihre Arbeit auch...


Will, Torsten T.
Torsten T. Will, Jahrgang 1970, beschäftigte sich bereits während seines Diploms in Informatik mit Programmiersprachen und ihren Konzepten. C++ hat ihn schon in seinen Anfängen fasziniert und begleitet. Andere Programmierprojekte bewältigte er vor allem in Pascal, Java, Scala und Python. Seit 2004 schreibt er im Fachmagazin c't gelegentlich über C++ und Python. Was dann noch an Zeit übrig bleibt, geht in die Fotografie.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.