Sie sind hier
E-Book

Forschung mit modernem C++

C++17-Intensivkurs für Wissenschaftler, Ingenieure und Programmierer

AutorPeter Gottschling
VerlagCarl Hanser Fachbuchverlag
Erscheinungsjahr2019
Seitenanzahl508 Seiten
ISBN9783446459816
FormatPDF
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis44,99 EUR
Das Programmieren von C ++ ist der schnellste Weg, um das gesamte Spektrum der auf heutiger Hardware verfügbaren Rechenleistung zu nutzen. Dieses Buch behandelt Techniken für das Programmieren von 'close to the bare metal' sowie abstraktere High-Level-Programmierkonstrukte. Es ist speziell für die C++-Programmierung von wissenschaftlichen und technischen Anwendungen konzipiert und führt den Leser zu den anspruchsvolleren Stilen und erweiterten Funktionen, die hierfür nötig sind.
Es bietet:
- C++-Wissen auf dem neuesten Stand von C++11/14/17
- Entwicklung geeigneter Abstraktionen, um schnell C ++-Programme für eine Vielzahl von Problembereichen schreiben zu können
- Viele Beispiele unter Verwendung technischer Algorithmen, z.B. Matrix Template Library MTL 4.
Das Material des Buches hat sich drei Jahre lang als Vorlesung und noch deutlich länger als Training professioneller Programmierer bewährt. Es deckt inhaltlich ein breites Spektrum ab: von der Tool Chain und dem Build-Prozess bis hin zu Templates, Lambdas und wissenschaftlichen Bibliotheken.

Peter Gottschling ist Geschäftsführer und Gründer der Firma SimuNova. Er engagiert sich im ISO-C++-Standardisierungskomitee und ist Autor wissenschaftlicher Bibliotheken wie der Matrix Template Library 4.

Kaufen Sie hier:

Horizontale Tabs

Leseprobe
1. Grundlagen
2. Klassen
3. Generische Programmierung
4. Bibliotheken
5. Meta-Programmierung
6. Objektorientierte Programmierung
7. Wissenschaftliche Projekte
A. Weitschweifendes
B. Werkzeuge
C. Sprachdefinitionen
Blick ins Buch
Inhaltsverzeichnis
Vorwort8
Danksagungen13
Über den Autor15
Inhalt16
1 Grundlagen26
1.1 Unser erstes Programm26
1.2 Variablen28
1.2.1 Fundamentale Typen29
1.2.2 Characters und Strings30
1.2.3 Variablen deklarieren31
1.2.4 Konstanten31
1.2.5 Literale32
1.2.6 Werterhaltende Initialisierung34
1.2.7 Gültigkeitsbereiche35
1.3 Operatoren37
1.3.1 Arithmetische Operatoren38
1.3.2 Boolesche Operatoren40
1.3.3 Bitweise Operatoren41
1.3.4 Zuweisung42
1.3.5 Programmablauf43
1.3.6 Speicherverwaltung44
1.3.7 Zugriffsoperatoren44
1.3.8 Typbehandlung44
1.3.9 Fehlerbehandlung45
1.3.10 Überladung45
1.3.11 Operatorprioritäten45
1.3.12 Vermeiden Sie Seiteneffekte!46
1.4 Ausdrücke und Anweisungen48
1.4.1 Ausdrücke48
1.4.2 Anweisungen49
1.4.3 Verzweigung49
1.4.4 Schleifen52
1.4.5 goto55
1.5 Funktionen56
1.5.1 Argumente56
1.5.2 Rückgabe der Ergebnisse58
1.5.3 Inlining59
1.5.4 Überladen59
1.5.5 Die main-Funktion61
1.6 Fehlerbehandlung62
1.6.1 Zusicherungen62
1.6.2 Ausnahmen64
1.6.3 Statische Zusicherungen68
1.7 I/O69
1.7.1 Standard-Ausgabe69
1.7.2 Standard-Eingabe70
1.7.3 Ein-/Ausgabe mit Dateien70
1.7.4 Generisches Stream-Konzept71
1.7.5 Formatierung72
1.7.6 I/O-Fehler behandeln73
1.7.7 File-System76
1.8 Arrays, Zeiger und Referenzen77
1.8.1 Arrays77
1.8.2 Zeiger79
1.8.3 Intelligente Zeiger82
1.8.4 Referenzen85
1.8.5 Vergleich zwischen Zeigern und Referenzen85
1.8.6 Nicht auf abgelaufene Daten verweisen!86
1.8.7 Containers for Arrays87
1.9 Strukturierung von Software-Projekten89
1.9.1 Kommentare89
1.9.2 Präprozessor-Direktiven91
1.10 Aufgaben95
1.10.1 Verengung95
1.10.2 Literale95
1.10.3 Operatoren95
1.10.4 Verzweigung95
1.10.5 Schleifen95
1.10.6 I/O96
1.10.7 Arrays und Zeiger96
1.10.8 Funktionen96
2 Klassen97
2.1 Universell programmieren,nicht detailversessen97
2.2 Member99
2.2.1 Mitgliedervariablen100
2.2.2 Zugriffsrechte100
2.2.3 Zugriffsoperatoren103
2.2.4 Der static-Deklarator für Klassen103
2.2.5 Member-Funktionen104
2.3 Konstruktoren und Zuweisungen105
2.3.1 Konstruktoren105
2.3.2 Zuweisungen115
2.3.3 Initialisierungslisten116
2.3.4 Einheitliche Initialisierung118
2.3.5 Move-Semantik120
2.3.6 Objekte aus Literalen konstruieren126
2.4 Destruktoren128
2.4.1 Implementierungsregeln129
2.4.2 Richtiger Umgang mit Ressourcen129
2.5 Zusammenfassung der Methodengenerierung135
2.6 Zugriff auf Mitgliedervariablen136
2.6.1 Zugriffsfunktionen136
2.6.2 Index-Operator137
2.6.3 Konstante Mitgliederfunktionen138
2.6.4 Referenz-qualifizierte Mitglieder140
2.7 Design von Operatorüberladung141
2.7.1 Seien Sie konsistent!141
2.7.2 Die Priorität respektieren142
2.7.3 Methoden oder freie Funktionen143
2.8 Aufgaben146
2.8.1 Polynomial146
2.8.2 Rational146
2.8.3 Move-Zuweisung147
2.8.4 Initialisierungsliste147
2.8.5 Ressourcenrettung147
3 Generische Programmierung148
3.1 Funktions-Templates148
3.1.1 Parametertyp-Deduktion149
3.1.2 Mit Fehlern in Templates klarkommen153
3.1.3 Gemischte Typen154
3.1.4 Einheitliche Initialisierung155
3.1.5 Automatischer Rückgabetyp155
3.2 Namensräume und Funktionssuche156
3.2.1 Namensräume156
3.2.2 Argumentabhängiges Nachschlagen159
3.2.3 Namensraum-Qualifizierung oder ADL163
3.3 Klassen-Templates165
3.3.1 Ein Container-Beispiel165
3.3.2 Einheitliche Klassen- und Funktionsschnittstellen entwerfen167
3.4 Typ-Deduktion und -Definition173
3.4.1 Automatische Variablentypen173
3.4.2 Typ eines Ausdrucks173
3.4.3 decltype(auto)174
3.4.4 Deduzierte Klassen-Template-Parameter176
3.4.5 Mehrere Typen deduzieren177
3.4.6 Typen definieren178
3.5 Etwas Theorie zu Templates: Konzepte180
3.6 Template-Spezialisierung181
3.6.1 Spezialisierung einer Klasse für einen Typ181
3.6.2 Funktionen Spezialisieren und Überladen183
3.6.3 Partielle Spezialisierung von Klassen185
3.6.4 Partiell spezialisierte Funktionen186
3.6.5 Strukturierte Bindung mit Nutzertypen188
3.7 Nicht-Typ-Parameter für Templates191
3.7.1 Container fester Größe191
3.7.2 Nicht-Typ-Parameter deduzieren194
3.8 Funktoren194
3.8.1 Funktionsartige Parameter196
3.8.2 Funktoren zusammensetzen197
3.8.3 Rekursion199
3.8.4 Generische Reduktion202
3.9 Lambdas203
3.9.1 Objekte erfassen204
3.9.2 Generische Lambdas208
3.10 Variablen-Templates208
3.11 Variadische Templates210
3.11.1 Rekursive Funktionen210
3.11.2 Direkte Expansion212
3.11.3 Indexsequenzen213
3.11.4 Faltung215
3.11.5 Typgeneratoren216
3.11.6 Wachsende Tests216
3.12 Übungen218
3.12.1 String-Darstellung218
3.12.2 String-Darstellung von Tupeln218
3.12.3 Generischer Stack219
3.12.4 Rationale Zahlen mit Typparameter219
3.12.5 Iterator eines Vektors219
3.12.6 Ungerader Iterator219
3.12.7 Bereich von ungeraden Zahlen220
3.12.8 Stack von bool220
3.12.9 Stack mit nutzerdefinierter Größe220
3.12.10 Deduktion von Nicht-Typ-Template-Argumenten220
3.12.11 Trapez-Regel221
3.12.12 Partielle Spezialisierung mit einer statischen Funktion221
3.12.13 Funktor221
3.12.14 Lambda221
3.12.15 Implementieren Sie make_unique222
4 Bibliotheken223
4.1 Standard-Template-Library224
4.1.1 Einführendes Beispiel224
4.1.2 Iteratoren225
4.1.3 Container230
4.1.4 Algorithmen239
4.1.5 Jenseits von Iteratoren244
4.1.6 Parallele Berechnung246
4.2 Numerik247
4.2.1 Komplexe Zahlen247
4.2.2 Zufallszahlengeneratoren250
4.2.3 Mathematische Spezialfunktionen259
4.3 Meta-Programmierung260
4.3.1 Wertgrenzen260
4.3.2 Typeigenschaften262
4.4 Utilities264
4.4.1 optional264
4.4.2 Tupel265
4.4.3 variant268
4.4.4 any270
4.4.5 string_view271
4.4.6 function272
4.4.7 Referenz-Wrapper275
4.5 Die Zeit ist gekommen277
4.6 Parallelität279
4.6.1 Terminologie279
4.6.2 Überblick280
4.6.3 Threads280
4.6.4 Rückmeldung an den Aufrufer282
4.6.5 Asynchrone Aufrufe283
4.6.6 Asynchroner Gleichungslöser285
4.6.7 Variadische Mutex-Sperre289
4.7 Wissenschaftliche Bibliotheken jenseits des Standards291
4.7.1 Andere Arithmetiken291
4.7.2 Intervallarithmetik292
4.7.3 Lineare Algebra292
4.7.4 Gewöhnliche Differentialgleichungen293
4.7.5 Partielle Differentialgleichungen293
4.7.6 Graphenalgorithmen294
4.8 Übungen294
4.8.1 Sortierung nach Betrag294
4.8.2 Suche mit einem Lambda als Prädikat294
4.8.3 STL-Container295
4.8.4 Komplexe Zahlen295
4.8.5 Parallele Vektoraddition296
4.8.6 Refaktorisierung der parallelen Addition296
5 Meta-Programmierung298
5.1 Lassen Sie den Compiler rechnen298
5.1.1 Kompilierzeitfunktionen298
5.1.2 Erweiterte Kompilierzeitfunktionen300
5.1.3 Primzahlen302
5.1.4 Wie konstant sind unsere Konstanten?304
5.1.5 Kompilierzeit-Lambdas305
5.2 Typinformationen306
5.2.1 Typabhängige Funktionsergebnisse306
5.2.2 Bedingte Ausnahmebehandlung310
5.2.3 Ein Beispiel für eine const-korrekte View311
5.2.4 Standard-Typmerkmale318
5.2.5 Domän-spezifische Type-Traits318
5.2.6 Typeigenschaften mit Überladung320
5.2.7 enable_if322
5.2.8 Variadische Templates überarbeitet326
5.3 Expression-Templates329
5.3.1 Einfache Implementierung eines Additionsoperators329
5.3.2 Eine Klasse für Expression-Templates333
5.3.3 Generische Expression-Templates335
5.4 Compiler-Optimierung mit Meta-Tuning337
5.4.1 Klassisches Abrollen mit fester Größe338
5.4.2 Geschachteltes Abrollen342
5.4.3 Aufwärmung zum dynamischen Abrollen348
5.4.4 Abrollen von Vektorausdrücken349
5.4.5 Tuning von Expression-Templates351
5.4.6 Tuning von Reduktionen354
5.4.7 Tuning geschachtelter Schleifen361
5.4.8 Resümee des Tunings366
5.5 Turing-Vollständigkeit368
5.6 Übungen371
5.6.1 Type-Traits371
5.6.2 Fibonacci-Sequenz371
5.6.3 Meta-Programm für den größten gemeinsamen Divisor371
5.6.4 Rationale Zahlen mit gemischten Typen372
5.6.5 Vektor-Expression-Template372
5.6.6 Meta-Liste373
6 Objektorientierte Programmierung374
6.1 Grundprinzipien374
6.1.1 Basis- und abgeleitete Klassen375
6.1.2 Konstruktoren erben378
6.1.3 Virtuelle Funktionen379
6.1.4 Funktoren über Vererbung386
6.1.5 Abgeleitete Klassen für Ausnahmen387
6.2 Redundanz entfernen388
6.3 Mehrfachvererbung390
6.3.1 Mehrere Eltern390
6.3.2 Gemeinsame Großeltern391
6.4 Dynamische Auswahl von Subtypen396
6.5 Konvertierung398
6.5.1 Umwandlungen zwischen abgeleiteten Klassen399
6.5.2 const_cast403
6.5.3 Umdeutung404
6.5.4 Umwandlung im Funktionsstil404
6.5.5 Implizite Umwandlungen406
6.6 CRTP407
6.6.1 Ein einfaches Beispiel407
6.6.2 Ein wiederverwendbarer Indexoperator409
6.7 Übungen411
6.7.1 Nicht-redundante Raute411
6.7.2 Vektorklasse mit Vererbung411
6.7.3 Ausnahmen in Vektor refaktorisieren411
6.7.4 Test auf geworfene Ausnahme412
6.7.5 Klonfunktion412
7 Wissenschaftliche Projekte413
7.1 Implementierung von ODE-Lösern413
7.1.1 Gewöhnliche Differentialgleichungen413
7.1.2 Runge-Kutta-Algorithmen416
7.1.3 Generische Implementierung417
7.1.4 Ausblick424
7.2 Projekte erstellen424
7.2.1 Build-Prozess425
7.2.2 Build-Tools429
7.2.3 Separates Kompilieren433
7.3 Einige abschließende Worte439
A Weitschweifendes441
A.1 Mehr über gute und schlechte Software441
A.2 Grundlagen im Detail447
A.2.1 Statische Variablen447
A.2.2 Mehr über if447
A.2.3 Duff’s Device449
A.2.4 Programmaufrufe449
A.2.5 Zusicherung oder Ausnahme?450
A.2.6 Binäre I/O451
A.2.7 I/O im Stile von C452
A.2.8 Garbarge-Collection453
A.2.9 Ärger mit Makros454
A.3 Praxisbeispiel: Matrix-Invertierung455
A.4 Klassendetails465
A.4.1 Zeiger auf Mitglieder465
A.4.2 Weitere Initialisierungsbeispiele465
A.4.3 Zugriff auf mehrdimensionale Datenstrukturen466
A.5 Methodengenerierung469
A.5.1 Automatische Generierung470
A.5.2 Steuerung der Generierung472
A.5.3 Generierungsregeln473
A.5.4 Fallstricke und Designrichtlinien477
A.6 Template-Details481
A.6.1 Einheitliche Initialisierung481
A.6.2 Welche Funktion wird aufgerufen?481
A.6.3 Spezialisierung auf spezifische Hardware484
A.6.4 Variadisches binäres I/O485
A.7 Mehr über Bibliotheken486
A.7.1 std::vector in C++03 verwenden486
A.7.2 variant mal nerdisch487
A.8 Dynamische Auswahl im alten Stil487
A.9 Mehr über Meta-Programmierung488
A.9.1 Das erste Meta-Programm in der Geschichte488
A.9.2 Meta-Funktionen490
A.9.3 Rückwärtskompatible statische Zusicherung491
A.9.4 Anonyme Typparameter492
A.9.5 Benchmark-Quellen für dynamisches Abrollen496
A.9.6 Benchmark für Matrixprodukt497
B Werkzeuge498
B.1 g++498
B.2 Debugging499
B.2.1 Textbasierte Debugger499
B.2.2 Debugging mit graphischen Interface: DDD501
B.3 Speicheranalyse503
B.4 gnuplot504
B.5 Unix, Linux und Mac OS505
C Sprachdefinitionen507
C.1 Wertkategorien507
C.2 Konvertierungsregeln510
C.2.1 Aufwertung511
C.2.2 Andere Konvertierungen511
C.2.3 Arithmetische Konvertierungen512
C.2.4 Verengung513
Literatur514
Abbildungsverzeichnis517
Tabellenverzeichnis518
Index519

Weitere E-Books zum Thema: Programmiersprachen - Softwareentwicklung

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

Programmieren lernen in PHP 5

E-Book Programmieren lernen in PHP 5
Format: PDF

Mit der Version 5 erreicht PHP einen bemerkenswerten Reifegrad, der PHP zu einer festen Größe in der Welt der Webprogrammierung macht. Gerade die leichte Erlernbarkeit macht PHP zur idealen…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Weitere Zeitschriften

Archiv und Wirtschaft

Archiv und Wirtschaft

"Archiv und Wirtschaft" ist die viermal jährlich erscheinende Verbandszeitschrift der Vereinigung der Wirtschaftsarchivarinnen und Wirtschaftsarchivare e. V. (VdW), in der seit 1967 rund 2.500 ...

BMW Magazin

BMW Magazin

Unter dem Motto „DRIVEN" steht das BMW Magazin für Antrieb, Leidenschaft und Energie − und die Haltung, im Leben niemals stehen zu bleiben.Das Kundenmagazin der BMW AG inszeniert die neuesten ...

küche + raum

küche + raum

Internationale Fachzeitschrift für Küchenforschung und Küchenplanung. Mit Fachinformationen für Küchenfachhändler, -spezialisten und -planer in Küchenstudios, Möbelfachgeschäften und den ...

DHS

DHS

Die Flugzeuge der NVA Neben unser F-40 Reihe, soll mit der DHS die Geschichte der "anderen" deutschen Luftwaffe, den Luftstreitkräften der Nationalen Volksarmee (NVA-LSK) der ehemaligen DDR ...

IT-BUSINESS

IT-BUSINESS

IT-BUSINESS ist seit mehr als 25 Jahren die Fachzeitschrift für den IT-Markt Sie liefert 2-wöchentlich fundiert recherchierte Themen, praxisbezogene Fallstudien, aktuelle Hintergrundberichte aus ...

Evangelische Theologie

Evangelische Theologie

Über »Evangelische Theologie« In interdisziplinären Themenheften gibt die Evangelische Theologie entscheidende Impulse, die komplexe Einheit der Theologie wahrzunehmen. Neben den Themenheften ...

F- 40

F- 40

Die Flugzeuge der Bundeswehr, Die F-40 Reihe behandelt das eingesetzte Fluggerät der Bundeswehr seit dem Aufbau von Luftwaffe, Heer und Marine. Jede Ausgabe befasst sich mit der genaue Entwicklungs- ...