dummies
 
 

Suchen und Finden

Titel

Autor/Verlag

Inhaltsverzeichnis

Nur ebooks mit Firmenlizenz anzeigen:

 

C++ - Das umfassende Handbuch

von: Torsten T. Will

Rheinwerk Computing, 2017

ISBN: 9783836243629 , 1067 Seiten

Format: PDF, OL

Kopierschutz: Wasserzeichen

Windows PC,Mac OSX,Windows PC,Mac OSX Apple iPad, Android Tablet PC's Online-Lesen für: Windows PC,Mac OSX,Linux

Preis: 35,90 EUR

Exemplaranzahl:  Preisstaffel

Für Firmen: Nutzung über Internet und Intranet (ab 2 Exemplaren) freigegeben

Derzeit können über den Shop maximal 500 Exemplare bestellt werden. Benötigen Sie mehr Exemplare, nehmen Sie bitte Kontakt mit uns auf.


Mehr zum Inhalt

C++ - Das umfassende Handbuch


 

Vorwort

23

TEIL I Grundlagen

27

1 Das C++-Handbuch

29

1.1 Neu und Modern

30

1.2 »Dan«-Kapitel

30

1.3 Darstellung in diesem Buch

31

1.4 Verwendete Formatierungen

1

1.5 Sorry for my Denglish

32

2 Programmieren in C++

35

2.1 Übersetzen

36

2.2 Übersetzungsphasen

36

2.3 Aktuelle Compiler

38

2.3.1 Gnu C++

38

2.3.2 Clang++ der LLVM

38

2.3.3 Microsoft Visual Studio

38

2.4 Entwicklungsumgebungen

1

2.5 Die Kommandozeile unter Ubuntu

40

2.5.1 Ein Programm erstellen

41

2.5.2 Automatisieren mit Makefile

43

2.6 Die IDE »Microsoft Visual Studio Community« unter Windows

44

2.7 Das Beispielprogramm beschleunigen

46

3 C++ für Umsteiger

49

4 Die Grundbausteine von C++

55

4.1 Kommentare

58

4.2 Die »include«-Direktive

58

4.3 Die Standardbibliothek

58

4.4 Die Funktion »main()«

59

4.5 Typen

59

4.6 Variablen

60

4.7 Initialisierung

60

4.8 Ausgabe auf der Konsole

61

4.9 Anweisungen

1

4.10 Ohne Eile erklärt

62

4.10.1 Leerräume, Bezeichner und Token

64

4.10.2 Kommentare

65

4.10.3 Funktionen und Argumente

66

4.10.4 Seiteneffekt-Operatoren

67

4.10.5 Die »main«-Funktion

68

4.10.6 Anweisungen

1

4.10.7 Ausdrücke

72

4.10.8 Zuweisungen

1

4.10.9 Typen

75

4.10.10 Variablen – Deklaration, Definition und Initialisierung

80

4.10.11 Initialisieren mit »auto«

81

4.10.12 Details zur »include«-Direktive und »include« direkt

81

4.10.13 Eingabe und Ausgabe

1

4.10.14 Der Namensraum »std«

83

4.11 Operatoren

85

4.11.1 Operatoren und Operanden

86

4.11.2 Überblick über Operatoren

87

4.11.3 Arithmetische Operatoren

87

4.11.4 Bitweise Arithmetik

88

4.11.5 Zusammengesetzte Zuweisung

91

4.11.6 Post- und Präinkrement sowie Post- und Prädekrement

92

4.11.7 Relationale Operatoren

92

4.11.8 Logische Operatoren

93

4.11.9 Pointer- und Dereferenzierungsoperatoren

94

4.11.10 Besondere Operatoren

95

4.11.11 Funktionsähnliche Operatoren

96

4.11.12 Operatorreihenfolge

97

4.12 Eingebaute Datentypen

1

4.12.1 Übersicht

99

4.12.2 Eingebaute Datentypen initialisieren

1

4.12.3 Ganzzahlen

101

4.12.4 Fließkommazahlen

112

4.12.5 Wahrheitswerte

125

4.12.6 Zeichentypen

127

4.12.7 Komplexe Zahlen

129

4.13 Undefiniertes und unspezifiziertes Verhalten

132

5 Guter Code, 1. Dan: Lesbar programmieren

135

5.1 Kommentare

135

5.2 Dokumentation

136

5.3 Einrückungen und Zeilenlänge

1

5.4 Zeilen pro Funktion und Datei

138

5.5 Klammern und Leerzeichen

139

5.6 Namen

140

6 Höhere Datentypen

143

6.1 Strings und Streams

144

6.2 Der Zeichenkettentyp »string«

144

6.2.1 Initialisierung

145

6.2.2 Funktionen und Methoden

146

6.2.3 Andere Stringtypen

147

6.3 Streams

148

6.3.1 Eingabe- und Ausgabeoperatoren

1

6.3.2 »getline«

151

6.3.3 Dateien für die Ein- und Ausgabe

151

6.3.4 Manipulatoren

153

6.3.5 Der Manipulator »endl«

153

6.4 Behälter und Zeiger

155

6.4.1 Container

155

6.4.2 Parametrisierte Typen

155

6.5 Die einfachen Sequenzcontainer

156

6.5.1 »array«

156

6.5.2 »vector«

158

6.6 Algorithmen

161

6.7 Zeiger und C-Arrays

161

6.7.1 Zeigertypen

162

6.7.2 C-Arrays

162

7 Funktionen

163

7.1 Deklaration und Definition einer Funktion

164

7.2 Funktionstyp

165

7.3 Funktionen verwenden

165

7.4 Eine Funktion definieren

167

7.5 Mehr zu Parametern

168

7.5.1 Call-by-Value

168

7.5.2 Call-by-Reference

169

7.5.3 Konstante Referenzen

170

7.5.4 Aufruf als Wert, Referenz oder konstante Referenz?

170

7.6 Funktionskörper

172

7.7 Parameter umwandeln

173

7.8 Funktionen überladen

175

7.9 Default-Parameter

177

7.10 Beliebig viele Argumente

179

7.11 Alternative Schreibweise zur Funktionsdeklaration

179

7.12 Spezialitäten

180

7.12.1 »noexcept«

180

7.12.2 Inline-Funktionen

181

7.12.3 »constexpr«

182

7.12.4 Gelöschte Funktionen

182

7.12.5 Spezialitäten bei Klassenmethoden

182

8 Anweisungen im Detail

1

8.1 Der Anweisungsblock

188

8.2 Die leere Anweisung

190

8.3 Deklarationsanweisung

191

8.4 Die Ausdrucksanweisung

192

8.5 Die »if«-Anweisung

193

8.6 Die »while«-Schleife

195

8.7 Die »do-while«-Schleife

197

8.8 Die »for«-Schleife

198

8.9 Die bereichsbasierte »for«-Schleife

200

8.10 Die »switch«-Verzweigung

202

8.11 Die »break«-Anweisung

206

8.12 Die »continue«-Anweisung

207

8.13 Die »return«-Anweisung

207

8.14 Die »goto«-Anweisung

209

8.15 Der »try-catch«-Block und »throw«

210

8.16 Zusammenfassung

212

9 Ausdrücke im Detail

213

9.1 Berechnungen und Seiteneffekte

1

9.2 Arten von Ausdrücken

215

9.3 Literale

216

9.4 Bezeichner

216

9.5 Klammern

217

9.6 Funktionsaufruf und Index-Zugriff

218

9.7 Zuweisung

218

9.8 Typumwandlung

220

10 Fehlerbehandlung

221

10.1 Fehlerbehandlung mit Fehlercodes

223

10.2 Was ist eine Ausnahme?

226

10.2.1 Ausnahmen auslösen und behandeln

227

10.2.2 Aufrufstapel abwickeln

228

10.3 Kleinere Fehlerbehandlungen

1

10.4 Weiterwerfen – »rethrow«

229

10.5 Die Reihenfolge im »catch«

230

10.5.1 Kein »finally«

231

10.5.2 Exceptions der Standardbibliothek

231

10.6 Typen für Exceptions

232

10.7 Wenn eine Exception aus »main« herausfällt

233

11 Guter Code, 2. Dan: Modularisierung

235

11.1 Programm, Bibliothek, Objektdatei

235

11.2 Bausteine

236

11.3 Trennen der Funktionalitäten

237

11.4 Ein modulares Beispielprojekt

238

11.4.1 Namensräume

241

11.4.2 Implementierung

242

11.4.3 Die Bibliothek nutzen

247

11.5 Spezialthema: Unity-Builds

249

TEIL II Objektorientierte Programmierung und mehr

251

12 Von der Struktur zur Klasse

253

12.1 Initialisierung

255

12.2 Rückgabe eigener Typen

256

12.3 Methoden statt Funktionen

257

12.4 Das bessere »drucke«

260

12.5 Eine Ausgabe wie jede andere

262

12.6 Methoden inline definieren

263

12.7 Implementierung und Definition trennen

264

12.8 Initialisierung per Konstruktor

265

12.8.1 Member-Defaultwerte in der Deklaration

267

12.8.2 Konstruktor-Delegation

268

12.8.3 Defaultwerte für die Konstruktor-Parameter

269

12.8.4 »init«-Methode nicht im Konstruktor aufrufen

270

12.8.5 Exceptions im Konstruktor

271

12.9 Struktur oder Klasse?

271

12.9.1 Kapselung

273

12.9.2 »public« und »private«, Struktur und Klasse

273

12.9.3 Daten mit »struct«, Verhalten mit »class«

273

12.9.4 Initialisierung von Typen mit privaten Daten

274

12.10 Zwischenergebnis

275

12.11 Verwendung eigener Datentypen

276

12.11.1 Klassen als Werte verwenden

278

12.11.2 Konstruktoren nutzen

281

12.11.3 Typumwandlungen

1

12.11.4 Kapseln und entkapseln

284

12.11.5 Typen lokal einen Namen geben

288

12.12 Typinferenz mit »auto«

291

12.13 Eigene Klassen in Standardcontainern

294

13 Namensräume und Qualifizierer

297

13.1 Der Namensraum »std«

297

13.2 Anonymer Namensraum

301

13.3 »static« macht lokal

303

13.4 »static« teilt gern

303

13.5 »static« macht dauerhaft

306

13.5.1 »inline namespace«

308

13.6 Zusammenfassung

309

13.7 Const

310

13.7.1 Const-Parameter

311

13.7.2 Const-Methoden

312

13.7.3 Const-Variablen

313

13.7.4 Const-Rückgaben

314

13.7.5 Const zusammen mit »static«

318

13.7.6 Noch konstanter mit »constexpr«

319

13.7.7 Un-Const mit »mutable«

322

13.7.8 Const-Korrektheit

323

13.7.9 Zusammenfassung

324

13.8 Flüchtig mit »volatile«

324

14 Guter Code, 3. Dan: Testen

327

14.1 Arten des Tests

327

14.1.1 Refactoring

329

14.1.2 Unittests

1

14.1.3 Sozial oder solitär

331

14.1.4 Doppelgänger

333

14.1.5 Suites

334

14.2 Frameworks

335

14.2.1 Arrange, Act, Assert

1

14.2.2 Frameworks zur Auswahl

338

14.3 Boost.Test

339

14.4 Hilfsmakros für Assertions

343

14.5 Ein Beispielprojekt mit Unittests

1

14.5.1 Privates und Öffentliches testen

347

14.5.2 Ein automatisches Testmodul

348

14.5.3 Test compilieren

351

14.5.4 Die Testsuite selbst zusammenbauen

351

14.5.5 Testen von Privatem

355

14.5.6 Parametrisierte Tests

356

15 Vererbung

359

15.1 Beziehungen

1

15.1.1 Hat-ein-Komposition

360

15.1.2 Hat-ein-Aggregation

360

15.1.3 Ist-ein-Vererbung

361

15.1.4 Ist-Instanz-von versus Ist-ein-Beziehung

362

15.2 Vererbung in C++

362

15.3 Hat-ein versus ist-ein

363

15.4 Gemeinsamkeiten finden

364

15.5 Abgeleitete Typen erweitern

366

15.6 Methoden überschreiben

367

15.7 Wie Methoden funktionieren

368

15.8 Virtuelle Methoden

370

15.9 Konstruktoren in Klassenhierarchien

372

15.10 Typumwandlung in Klassenhierarchien

373

15.10.1 Die Vererbungshierarchie aufwärts umwandeln

373

15.10.2 Die Vererbungshierarchie abwärts umwandeln

374

15.10.3 Referenzen behalten auch die Typinformation

374

15.11 Wann virtuell?

375

15.12 Andere Designs zur Erweiterbarkeit

376

16 Der Lebenszyklus von Klassen

379

16.1 Erzeugung und Zerstörung

380

16.2 Temporary: kurzlebige Werte

382

16.3 Der Destruktor zum Konstruktor

383

16.3.1 Kein Destruktor nötig

385

16.3.2 Ressourcen im Destruktor

385

16.4 Yoda-Bedingung

387

16.5 Konstruktion, Destruktion und Exceptions

389

16.6 Kopieren

390

16.7 Zuweisungsoperator

393

16.8 Streichen von Methoden

396

16.9 Verschiebeoperationen

398

16.9.1 Was der Compiler generiert

402

16.10 Operatoren

403

16.11 Eigene Operatoren in einem Datentyp

406

16.12 Besondere Klassenformen

411

16.12.1 Abstrakte Klassen und Methoden

411

16.12.2 Aufzählungsklassen

412

17 Guter Code, 4. Dan: Sicherheit, Qualität und Nachhaltigkeit

415

17.1 Die Nuller-Regel

415

17.1.1 Die großen Fünf

415

17.1.2 Hilfskonstrukt per Verbot

416

17.1.3 Die Nuller-Regel und ihr Einsatz

417

17.1.4 Ausnahmen von der Nuller-Regel

418

17.2 RAII – Resource Acquisition Is Initialization

420

17.2.1 Ein Beispiel mit C

420

17.2.2 Besitzende Raw-Pointer

422

17.2.3 Von C nach C++

423

17.2.4 Es muss nicht immer eine Exception sein

425

17.2.5 Mehrere Konstruktoren

426

17.2.6 Mehrphasige Initialisierung

426

17.2.7 Definieren, wo es gebraucht wird

427

17.2.8 Nothrow-new

427

18 Spezielles für Klassen

429

18.1 Darf alles sehen – »friend«-Klassen

429

18.2 non-public-Vererbung

434

18.2.1 Auswirkungen auf die Außenwelt

1

18.2.2 Nicht-öffentliche Vererbung in der Praxis

437

18.3 Signatur-Klassen als Interfaces

439

18.4 Multiple Vererbung

443

18.4.1 Multiple Vererbung in der Praxis

444

18.4.2 Achtung bei Typumwandlungen von Zeigern

1

18.4.3 Das Beobachter-Muster als praktisches Beispiel

450

18.5 Rautenförmige multiple Vererbung – »virtual« für Klassenhierarchien

452

18.6 Literale Datentypen – »constexpr« für Konstruktoren

456

19 Guter Code, 5. Dan: Klassisches objektorientiertes Design

459

19.1 Objekte in C++

461

19.2 Objektorientiert designen

462

19.2.1 SOLID

462

19.2.2 Seien Sie nicht STUPID

480

TEIL III Fortgeschrittene Themen

1

20 Zeiger

483

20.1 Adressen

484

20.2 Zeiger

485

20.3 Gefahren von Aliasing

487

20.4 Heapspeicher und Stapelspeicher

489

20.4.1 Der Stapel

489

20.4.2 Der Heap

490

20.5 Smarte Pointer

492

20.5.1 »unique ptr«

494

20.5.2 »shared ptr«

498

20.6 Rohe Zeiger

501

20.7 C-Arrays

506

20.7.1 Rechnen mit Zeigern

506

20.7.2 Verfall von C-Arrays

507

20.7.3 Dynamische C-Arrays

509

20.7.4 Zeichenkettenliterale

510

20.8 Iteratoren

511

20.9 Zeiger als Iteratoren

513

20.10 Zeiger im Container

513

20.11 Die Ausnahme: wann das Wegräumen nicht nötig ist

514

21 Makros

517

21.1 Der Präprozessor

518

21.2 Vorsicht vor fehlenden Klammern

521

21.3 Vorsicht vor Mehrfachausführung

522

21.4 Typvariabilität von Makros

523

21.5 Zusammenfassung

526

22 Schnittstelle zu C

527

22.1 Mit Bibliotheken arbeiten

528

22.2 C-Header

529

22.3 C-Ressourcen

532

22.4 »void«-Pointer

532

22.5 Daten lesen

533

22.6 Das Hauptprogramm

534

22.7 Zusammenfassung

535

23 Templates

537

23.1 Funktionstemplates

538

23.1.1 Überladung

539

23.1.2 Ein Typ als Parameter

540

23.1.3 Funktionskörper eines Funktionstemplates

540

23.1.4 Zahlen als Templateparameter

542

23.1.5 Viele Funktionen

543

23.1.6 Parameter mit Extras

544

23.1.7 Methodentemplates sind auch nur Funktionstemplates

546

23.2 Funktionstemplates in der Standardbibliothek

547

23.2.1 Iteratoren statt Container als Templateparameter

548

23.2.2 Beispiel: Informationen über Zahlen

550

23.3 Eine Klasse als Funktion

551

23.3.1 Werte für einen »function«-Parameter

552

23.3.2 C-Funktionspointer

553

23.3.3 Die etwas andere Funktion

555

23.3.4 Praktische Funktoren

558

23.3.5 Algorithmen mit Funktoren

559

23.3.6 Anonyme Funktionen alias Lambda-Ausdrücke

560

23.3.7 Templatefunktionen ohne »template«, aber mit »auto«

564

23.4 Templateklassen

565

23.4.1 Klassentemplates implementieren

565

23.4.2 Methoden von Klassentemplates implementieren

566

23.4.3 Objekte aus Klassentemplates erzeugen

568

23.4.4 Klassentemplates mit mehreren formalen Datentypen

570

23.4.5 Klassentemplates mit Non-Type-Parameter

571

23.4.6 Klassentemplates mit Default

573

23.4.7 Klassentemplates spezialisieren

574

23.5 Templates mit variabler Argumentanzahl

576

23.6 Eigene Literale

580

23.6.1 Was sind Literale?

581

23.6.2 Namensregeln

582

23.6.3 Phasenweise

582

23.6.4 Überladungsvarianten

583

23.6.5 Benutzerdefiniertes Literal mittels Template

1

23.6.6 Roh oder gekocht

587

23.6.7 Automatisch zusammengefügt

588

23.6.8 Unicodeliterale

588

TEIL IV Die Standardbibliothek

591

24 Container

593

24.1 Grundlagen

594

24.1.1 Wiederkehrend

594

24.1.2 Abstrakt

595

24.1.3 Operationen

596

24.1.4 Komplexität

597

24.1.5 Container und ihre Iteratoren

598

24.1.6 Algorithmen

600

24.2 Iteratoren-Grundlagen

601

24.2.1 Iteratoren aus Containern

602

24.2.2 Mehr Funktionalität mit Iteratoren

603

24.3 Allokatoren: Speicherfragen

605

24.4 Container-Gemeinsamkeiten

607

24.5 Ein Überblick über die Standardcontainer-Klassen

608

24.5.1 Typaliase der Container

609

24.6 Die sequenziellen Containerklassen

612

24.6.1 Gemeinsamkeiten und Unterschiede

614

24.6.2 Methoden von Sequenzcontainern

615

24.6.3 »vector«

618

24.6.4 »array«

631

24.6.5 »deque«

636

24.6.6 »list«

639

24.6.7 »forward list«

642

24.7 Assoziativ und geordnet

647

24.7.1 Gemeinsamkeiten und Unterschiede

648

24.7.2 Methoden der geordneten assoziativen Container

649

24.7.3 »set«

651

24.7.4 »map«

663

24.7.5 »multiset«

670

24.7.6 »multimap«

674

24.8 Nur assoziativ und nicht garantiert

678

24.8.1 Gemeinsamkeiten und Unterschiede

682

24.8.2 Methoden der ungeordneten assoziativen Container

1

24.8.3 »unordered set«

685

24.8.4 »unordered map«

693

24.8.5 »unordered multiset«

698

24.8.6 »unordered multimap«

703

24.9 Container-Adapter

706

24.10 Sonderfälle: »string«, »basic string« und »vector«

707

24.11 Sonderfälle: »vector«, »array« und »bitset«

708

24.11.1 Dynamisch und kompakt: »vector«

708

24.11.2 Statisch: »array« und »bitset«

708

24.12 Sonderfall: Value-Array mit »valarray<>«

711

25 Container-Unterstützung

721

25.1 Algorithmen

721

25.2 Iteratoren

723

25.3 Iterator-Adapter

723

25.4 Algorithmen der Standardbibliothek

724

25.5 Liste der Algorithmusfunktionen

726

25.6 Kopie statt Zuweisung – Werte in uninitialisierten Speicherbereichen

740

25.7 Eigene Algorithmen

741

26 Guter Code, 6. Dan: Für jede Aufgabe der richtige Container

745

26.1 Alle Container nach Aspekten sortiert

745

26.1.1 Wann ist ein »vector« nicht die beste Wahl?

745

26.1.2 Immer sortiert: »set«, »map«, »multiset« und »multimap«

746

26.1.3 Im Speicher hintereinander: »vector«, »array«

746

26.1.4 Einfügung billig: »list«

747

26.1.5 Wenig Speicheroverhead: »vector«, »array«

748

26.1.6 Größe dynamisch: alle außer »array«

749

26.2 Rezepte für Container

750

26.2.1 Zwei Phasen? »vector« als guter »set«-Ersatz

751

26.2.2 Den Inhalt eines Containers auf einem Stream ausgeben

752

26.2.3 So statisch ist »array« gar nicht

753

26.3 Iteratoren sind mehr als nur Zeiger

756

26.4 Algorithmen je nach Container unterschiedlich implementieren

758

27 Streams

761

27.1 Ein- und Ausgabekonzept

761

27.2 Globale, vordefinierte Standardstreams

762

27.3 Methoden für die Aus- und Eingabe von Streams

1

27.3.1 Methoden für die unformatierte Ausgabe

764

27.3.2 Methoden für die (unformatierte) Eingabe

1

27.4 Fehlerbehandlung und Zustand von Streams

768

27.4.1 Methoden für die Behandlung von Fehlern bei Streams

769

27.5 Streams manipulieren und formatieren

771

27.5.1 Manipulatoren

772

27.5.2 Eigene Manipulatoren ohne Argumente erstellen

777

27.5.3 Eigene Manipulatoren mit Argumenten erstellen

779

27.5.4 Format-Flags direkt ändern

780

27.6 Streams für die Dateiein- und Dateiausgabe

782

27.6.1 Die Streams »ifstream«, »ofstream« und »fstream«

783

27.6.2 Verbindung zu einer Datei herstellen

783

27.6.3 Lesen und Schreiben

788

27.6.4 Wahlfreier Zugriff

795

27.7 Streams für Strings

796

27.8 Streampuffer

801

28 Standardbibliothek – Extras

805

28.1 »pair« und »tuple«

805

28.1.1 Mehrere Werte zurückgeben

806

28.2 Reguläre Ausdrücke

812

28.2.1 Matchen und Suchen

813

28.2.2 Ergebnis und Teile davon

813

28.2.3 Gefundenes Ersetzen

814

28.2.4 Reich an Varianten

814

28.2.5 Iteratoren

815

28.2.6 Matches

816

28.2.7 Optionen

816

28.2.8 Geschwindigkeit

816

28.2.9 Standardsyntax leicht gekürzt

817

28.2.10 Anmerkungen zu regulären Ausdrücken in C++

1

28.3 Zufall

821

28.3.1 Einen Würfel werfen

822

28.3.2 Echter Zufall

824

28.3.3 Andere Generatoren

824

28.3.4 Verteilungen

1

28.4 Mathematisches

830

28.4.1 Brüche und Zeiten – »« und »«

830

28.4.2 Numerik mit »«

843

28.4.3 Vordefinierte Suffixe für benutzerdefinierte Literale

847

28.5 Systemfehlerbehandlung mit »system error«

849

28.5.1 »error code« und »error condition«

851

28.5.2 Fehlerkategorien

855

28.5.3 Eigene Fehlercodes

855

28.5.4 »system error«-Exception

857

28.6 Laufzeit-Typinformationen – »« und »«

858

28.7 Hilfsklassen rund um Funktoren – »«

862

28.7.1 Funktionsobjekte

862

28.7.2 Funktionsgeneratoren

866

28.8 Ausblick auf C++17

869

28.8.1 »variant«

869

28.8.2 »optional« und »any«

870

28.8.3 »string view«

871

28.8.4 »filesystem«

872

28.8.5 Spezielle mathematische Funktionen

872

28.8.6 »sample«

873

28.8.7 »search«

874

28.8.8 »byte«

874

29 Threads – Programmieren mit Mehrläufigkeit

875

29.1 C++-Threading-Grundlagen

876

29.1.1 Einer Threadfunktion Parameter übergeben

881

29.1.2 Einen Thread verschieben

886

29.1.3 Wie viele Threads starten?

888

29.1.4 Welcher Thread bin ich?

891

29.2 Gemeinsame Daten

891

29.2.1 Daten mit Mutexen schützen

892

29.2.2 Data Races

895

29.2.3 Interface-Design für Multithreading

896

29.2.4 Sperren können zum Patt führen

901

29.2.5 Flexibleres Sperren mit »unique lock«

903

29.3 Andere Möglichkeiten zur Synchronisation

904

29.3.1 Nur einmal aufrufen mit »once flag« und »call once«

904

29.3.2 Sperren zählen mit »recursive mutex«

907

29.4 Im eigenen Speicher mit »thread local«

908

29.5 Mit »condition variable« auf Ereignisse warten

909

29.6 Einmal warten mit »future«

914

29.6.1 Ausnahmebehandlung bei »future«

919

29.6.2 »promise«

921

29.7 Atomics

924

29.8 Zusammenfassung

930

29.9 Ausblick auf C++17

932

TEIL V Über den Standard hinaus

933

30 Guter Code, 7. Dan: Richtlinien

935

30.1 Guideline Support Library

936

30.2 C++ Core Guidelines

937

30.2.1 Motivation

937

30.2.2 Typsicherheit

938

30.2.3 Nutzen Sie RAII

940

30.2.4 Klassenhierarchien

942

30.2.5 Generische Programmierung

945

30.2.6 Lassen Sie sich nicht von Anachronismen verwirren

948

31 GUI-Programmierung mit Qt

951

31.1 Ein erstes Miniprogramm

955

31.1.1 Kurze Übersicht über die Oberfläche von Qt Creator

956

31.1.2 Ein einfaches Projekt erstellen

957

31.2 Objektbäume und Besitz

966

31.3 Signale und Slots

967

31.3.1 Verbindung zwischen Signal und Slot herstellen

967

31.3.2 Signal und Slot mithilfe der Qt-Referenz ermitteln

1

31.4 Klassenhierarchie von Qt

987

31.4.1 Basisklasse »QObject«

987

31.4.2 Weitere wichtige Klassen

987

31.5 Eigene Widgets mit dem Qt Designer erstellen

990

31.6 Widgets anordnen

996

31.6.1 Grundlegende Widgets für das Layout

996

31.7 Dialoge erstellen mit »QDialog«

1000

31.8 Vorgefertigte Dialoge von Qt

1008

31.8.1 »QMessageBox« – der klassische Nachrichtendialog

1008

31.8.2 »QFileDialog« – der Dateiauswahldialog

1009

31.8.3 »QInputDialog« – Dialog zur Eingabe von Daten

1

31.8.4 Weitere Dialoge

1015

31.9 Eigenen Dialog mit dem Qt Designer erstellen

1015

31.10 Grafische Bedienelemente von Qt (Qt-Widgets)

1031

31.10.1 Schaltflächen (Basisklasse »QAbstractButton«)

1031

31.10.2 Container-Widgets (Behälter-Widgets)

1033

31.10.3 Widgets zur Zustandsanzeige

1034

31.10.4 Widgets zur Eingabe

1

31.10.5 Onlinehilfen

1036

31.11 Anwendungen in einem Hauptfenster

1

31.11.1 Die Klasse für das Hauptfenster »QMainWindow«

1037

31.12 Zusammenfassung

1048

Cheat Sheet

1052

Index

1055