Arnold Willemer

Einstieg in C++

Galileo Press

Inhalt Vorwort

1.1

1.2

1.3

1.4

1.5

1.6

2.1

13

Programmieren 1.1.1 Start eines Programms 1.1.2 Eintippen, übersetzen, ausführen 1.1.3 Der Algorithmus 1.1.4 Die Sprache C++ 1.1.5 Fragen zur Selbstkontrolle Grundgerüst eines Programms 1.2.1 Kommentare 1.2.2 Anweisungen 1.2.3 Blöcke Variablen 1.3.1 Variablendefinition 1.3.2 Geltungsbereich 1.3.3 Namensregeln und Syntaxgraph 1.3.4 Typen 1.3.5 Syntax der Variablendefinition 1.3.6 Konstanten Verarbeitung 1.4.1 Zuweisung 1.4.2 Rechenkünstler 1.4.3 Abkürzungen 1.4.4 Funktionen am Beispiel der Zufallsfunktion 1.4.5 Typumwandlung Ein- und Ausgabe 1.5.1 Ausgabestrom nach cout 1.5.2 Formatierte Ausgabe 1.5.3 Eingabestrom aus ein Übungen

17 17 18 20 21 26 26 27 29 30 30 31 33 34 36 47 48 58 58 59 60 63 65 66 67 69 69 70

Verzweigungen 2.1.1 Nur unter einer Bedingung: if 2.1.2 Andernfalls: eise

72 72 74

5

Inhalt

2.2

2.3

2.4

2.5

3.1

3.2

3.3 3.4

3.5 3.6 3.7

6

2.1.3 Fall für Fall: switch case 2.1.4 Kurzabfrage mit dem Fragezeichen Boolesche Ausdrücke 2.2.1 Variablen und Konstanten 2.2.2 Operatoren 2.2.3 Verknüpfung von booleschen Ausdrücken Immer diese Wiederholungen: Schleifen 2.3.1 Kopfgesteuert: while 2.3.2 Fußgesteuert: do. .. while 2.3.3 Abgezählt: for 2.3.4 Schleifensprünge: break und continue 2.3.5 Der brutale Sprung: goto Beispiele 2.4.1 Primzahlen 2.4.2 Größter gemeinsamer Teiler Übungen

78 81 83 83 83 86 92 93 96 97 100 102 103 104 109 111

Das Array 3.1.1 Beispiel Bubblesort 3.1.2 Zuweisung von Arrays 3.1.3 C-Zeichenketten 3.1.4 Beispiel: Zahleneingabe auswerten 3.1.5 Mehrere Dimensionen 3.1.6 Beispiel: Bermuda Der Zeiger und die Adresse 3.2.1 Indirekter Zugriff 3.2.2 Arrays und Zeiger 3.2.3 Zeigerarithmetik 3.2.4 Konstante Zeiger 3.2.5 Anonyme Zeiger Der Variablenverbund: struct 3.3.1 Beispiel: Bermuda Dynamische Strukturen 3.4.1 Anlegen und Freigeben von Speicher 3.4.2 Zur Laufzeit erzeugte Arrays

113 118 122 123 124 127 127 130 134 135 137 139 140 141 144 146 147 148

3.4.3

149

Verkettete Listen

Die Union Aufzählungstyp enum Typen definieren

151 152 153

Inhalt

4.1

Parameter

160

4.1.1

Prototypen

163

4.1.2

Zeiger als Parameter

164

4.1.3

Arrays als Parameter

166

4.1.4

Referenz-Parameter

168

4.1.5

Beispiel: Stack

169

4.1.6

Vorbelegte Parameter

171

4.1.7

Die Parameter der Funktion main

172

4.1.8

Variable Anzahl von Parametern

174

4.2

Überladen von Funktionen

176

4.3

Kurz und schnell: Inline-Funktionen

177

4.4

Top-Down

178

4.4.1 4.5

4.6

Beispiel: Bermuda

179

Geltungsbereich von Variablen

183

4.5.1

Globale Variablen

184

4.5.2

Lokale Variablen

185

4.5.3

Statische Variablen

186

Selbstaufrufende Funktionen

188

4.6.1

Einsatzbereich

189

4.6.2

Beispiel: binärer Baum

190

4.6.3

Türme von Hanoi

193

4.6.4

Beispiel: Taschenrechner

196

4.7

Funktionszeiger

5.1

Die Klasse als Datenstruktur

204

5.1.1

Funktion und Datenstruktur heiraten

205

5.1.2

Zugriff auf Klassenelemente

208

5.2

5.3

201

Geburt und Tod eines Objekts

209

5.2.1

Konstruktor und Destruktor

210

5.2.2

Konstruktor und Parameter

212

Öffentlichkeit und Privatsphäre

214

5.3.1

private und public

215

5.3.2

Beispiel: Stack

218

5.3.3

Freunde

220

5.4

Kopierkonstruktor

221

5.5

Überladen von Funktionen

225

5.6

Kür: Überladen von Operatoren

226

7

Inhalt

5.7

5.8

Addition

227

5.6.2

Globale Operatorfunktionen

229

5.6.3

Inkrementieren und Dekrementieren

230

5.6.4

Der Zuweisungsoperator

232

5.6.5

Die Vergleichsoperatoren

235

5.6.6

Der Ausgabeoperator

237

5.6.7

Der Indexoperator

238

5.6.8

Der Aufrufoperator ()

240

5.6.9

Der Konvertierungsoperator

241

Attribute

242

5.7.1

Statische Variablen und Funktionen in Klassen .. 242

5.7.2

Konstanten

244

Vererbung

246

5.8.1

Zugriff auf die Vorfahren

251

5.8.2

Konstruktoren und Zuweisung

255

5.8.3

Mehrfach Vererbung

256

5.8.4

Polymorphie durch virtuelle Funktionen

257

5.9

Klassendefinition und Syntaxgraph

267

5.10

Aufteilung der Quelltexte

269

5.10.1

Dateikennungen

270

5.10.2

Deklaration und Definition

270

5.10.3

Header-Dateien

271

5.10.4

Statische Funktionen

274

5.10.5

Verborgene Implementation

274

5.10.6

Bibliotheken

276

5.10.7

L i n k e r u n d Bibliotheken

276

6.1

6.2

6.3

8

5.6.1

Generische Programmierung

279

6.1.1

Template-Funktionen

280

6.1.2

Template-Klassen

283

6.1.3

AAakroprogrammierung mit #define

286

Namensräume

288

6.2.1

Definition eines Namensraums

288

6.2.2

Zugriff

290

6.2.3

Besondere Namensräume

290

6.2.4

A n o n y m e Namensräume

290

6.2.5

Syntaxgraph

292

Katastrophenschutz mit try und catch

292

6.3.1

293

Eigene Ausnahmen erzeugen

Inhalt

6.4

7.1

7.2

7.3

7.4

7.5

7.6

6.3.2 Erstellen von Fehlerklassen 6.3.3 Die Ausnahmen der Standardbibliotheken Systemnahe Programmierung 6.4.1 Bit-Operatoren 6.4.2 Shift-Operatoren 6.4.3 Zugriff auf Hardware-Adressen 6.4.4 Bit-Strukturen 6.4.5 Portabilität und der Präprozessor

297 300 306 306 309 310 310 311

Zeichenketten und Strings 7.1.1 Die Standardklasse string 7.1.2 Andere String-Bibliotheken 7.1.3 Klassische C-Funktionen iostream für Fortgeschrittene 7.2.1 Eingabe über ein 7.2.2 Manipulatoren Dateioperationen 7.3.1 Öffnen und Schließen 7.3.2 Lesen und Schreiben 7.3.3 Zustandsbeobachtung 7.3.4 Dateizugriffe nach ANSI-C 7.3.5 Dateisystemkommandos 7.3.6 Datei-Eigenschaften ermitteln Mathematische Funktionen 7.4.1 Die mathematische Standardbibliothek 7.4.2 Komplexe Zahlen Die Standard Template Library (STL) 7.5.1 Die Algorithmen der STL 7.5.2 Container und Iteratoren 7.5.3 Die Container-Klasse vector 7.5.4 Die Container-Klasse deque 7.5.5 Die Container-Klasse list 7.5.6 Container-Adapter 7.5.7 Die Container-Klassen set und multiset 7.5.8 Die Container-Klassen map und multimap 7.5.9 Iteratortypen 7.5.10 Die Template-Klasse bitset Zeitfunktionen 7.6.1 Datum und Uhrzeit

315 316 328 329 336 336 337 341 342 344 349 351 354 357 360 360 363 364 364 373 373 378 381 385 388 390 391 392 393 394

9

Inhalt

7.7

A

B

10

7.6.2 Zeit stoppen Dynamische Bibliotheken

C++ für Hektiker A.1 Ein Programm A.2 Abfrage und Schleifen A.2.1 Abfrage und boolesche Ausdrücke A.2.2 Die while-Schleife A.2.3 Die for-Schleife A.3 Arrays A.4 Funktionen A.4.1 Programmaufteilung A.4.2 Rückgabewert A.4.3 Parameter A.5 Klassen A.5.1 Konstruktor A.5.2 Vererbung A.5.3 Polymorphie A.6 Templates Programmierumgebung B.1 Quelltexteditor B.2 Compiler B.3 Debugger B.4 GNU-Compiler unter UNIX/Linux B.4.1 Compiler-Optionen B.4.2 make B.4.3 gdbGNUdebug B.5 Borland C++-Compiler B.6 KDevelop B.6.1 Neues Projekt B.6.2 Kompilieren und starten B.7 Microsoft Visual C++ B.7.1 Neues Projekt B.7.2 Kompilieren und starten B.8 Borland C++-Builder/Kylix B.8.1 Neues Projekt B.8.2 Kompilieren und starten B.9 Bloodshed Dev-C++ (CD) B.9.1 Installation

395 397

403 403 408 408 410 411 412 416 416 419 421 424 428 432 434 436 439 439 440 441 442 442 443 448 450 451 452 454 455 456 457 459 460 462 463 463

Inhalt

C D E

B.9.2 Ein Projekt anlegen B.9.3 Übersetzen und starten B.10 CygWin B.11 Watcom C++(CD) B.11.1 Installation B.11.2 Erstellen eines Projekts Musterlösungen Glossar Literatur

Index

464 466 468 469 469 470 473 493 497

499

11