Arnold Willemer. Einstieg in C++ Galileo Press

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...
Author: Kurt Küchler
19 downloads 3 Views 3MB Size
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

15 15 16 18 19 24 24 25 27 27 28 29 31 32 34 45 46 56 56 57 59 61 63 65 65 67 68 69

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

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: d o . . . 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

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

3.4.3 3.5 3.6 3.7

6 \

Verkettete Listen

Die Union Aufzählungstyp enum Typen definieren

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

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

149 151 152 153

4.1

4.2 4.3 4.4 4.5

4.6

4.7

5.1

5.2

5.3

5.4 5.5 5.6

Parameter 4.1.1 Prototypen 4.1.2 Zeiger als Parameter 4.1.3 Arrays als Parameter 4.1.4 Referenzparameter 4.1.5 Beispiel: Stack 4.1.6 Vorbelegte Parameter 4.1.7 Die Parameter der Funktion main 4.1.8 Variable Anzahl von Parametern Überladen von Funktionen Kurz und schnell: Inline-Funktionen Тор-Down 4.4.1 Beispiel: Bermuda Geltungsbereich von Variablen 4.5.1 Globale Variablen 4.5.2 Lokale Variablen 4.5.3 Statische Variablen Selbstaufrufende Funktionen 4.6.1 Einsatzbereich 4.6.2 Beispiel: binärer Baum 4.6.3 Türme von Hanoi 4.6.4 Beispiel: Taschenrechner Funktionszeiger

160 163 164 166 168 169 171 172 174 176 177 178 179 183 184 185 186 188 189 190 193 196 201

Die Klasse als Datenstruktur 5.1.1 Funktion und Datenstruktur heiraten 5.1.2 Zugriff auf Klassenelemente Geburt und Tod eines Objekts 5.2.1 Konstruktor und Destruktor 5.2.2 Konstruktor und Parameter Öffentlichkeit und Privatsphäre 5.3.1 private und public 5.3.2 Beispiel: Stack 5.3.3 Freunde Kopierkonstruktor Überladen von Elementfunktionen Kür: Überladen von Operatoren

204 205 208 209 210 212 214 215 218 220 221 225 226

Inhalt

5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.6.6 5.6.7

5.7

5.8

5.9

6.1

6.2

6.3

6.4

8

Addition Globale Operatorfunktionen Inkrementieren und Dekrementieren Der Zuweisungsoperator Die Vergleichsoperatoren Der Ausgabeoperator Der Indexoperator

227 229 230 232 235 237 238

5.6.8 Der Aufrufoperator 0 5.6.9 Der Konvertierungsoperator Attribute 5.7.1 Statische Variablen und Funktionen in Klassen 5.7.2 Konstanten Vererbung 5.8.1 Zugriff auf die Vorfahren 5.8.2 Konstruktoren und Zuweisung 5.8.3 Mehrfachvererbung 5.8.4 Polymorphie durch virtuelle Funktionen Klassendefinition und Syntaxgraph

240 241 242 242 244 246 251 255 257 257 267

Der C++-Compiler 6.1.1 Compiler-Aufruf 6.1.2 Compiler-Optionen 6.1.3 Fehlermeldungen Präprozessor 6.2.1 Einbinden von Dateien: #include 6.2.2 Konstanten und Makros: #define 6.2.3 Abfragen: #if 6.2.4 Vordefinierte Makros 6.2.5 Weitere Präprozessorbefehle Aufteilung der Quelltexte 6.3.1 Beispiel Bermuda 6.3.2 Datei ken nungen 6.3.3 Deklaration und Definition 6.3.4 Header-Dateien 6.3.5 Statische Funktionen 6.3.6 Verborgene Implementierung Linker und Bibliotheken 6.4.1 Einbinden von statischen Bibliotheken 6.4.2 Dynamische Bibliotheken

271 271 272 273 276 276 276 279 280 281 282 282 285 286 287 288 289 291 291 292

Inhalt

6.5

make

295

6.6

6.5.1 Makros im Makefile 6.5.2 Mehrere Ziele Debuggen mit dem gdb

298 299 300

Generische Programmierung 7.1.1 Template-Funktionen 7.1.2 Template-Klassen 7.1.3 Makro-Programmierung mit #define Namensräume 7.2.1 Definition eines Namensraums 7.2.2 Zugriff 7.2.3 Besondere Namensräume 7.2.4 Anonyme Namensräume 7.2.5 Syntaxgraph Katastrophenschutz mit try und catch 7.3.1 Eigene Ausnahmen erzeugen 7.3.2 Erstellen von Fehlerklassen 7.3.3 Die Ausnahmen der Standardbibliotheken Systemnahe Programmierung 7.4.1 Bit-Operatoren 7.4.2 Shift-Operatoren 7.4.3 Zugriff auf Hard ware-Adressen 7.4.4 Bit-Strukturen

303 304 307 310 312 313 314 314 315 316 316 318 321 324 330 330 333 334 334

Zeichenketten und Strings 8.1.1 Die Standardklasse string 8.1.2 Andere String-Bibliotheken 8.1.3 Klassische C-Funktionen iostream für Fortgeschrittene 8.2.1 Eingabe über ein 8.2.2 Manipulatoren Dateioperationen 8.3.1 Öffnen und Schließen 8.3.2 Lesen und Schreiben 8.3.3 Zustandsbeobachtung 8.3.4 Dateizugriffe nach ANSI-C

337 338 350 351 358 358 359 363 364 366 371 373

7.1

7.2

7.3

7.4

8.1

8.2

8.3

9

Inhalt

8.4

8.5

9.1

9.2 9.3

9.4

9.5 9.6

9.7 9.8

9.9

10

8.3.5 Dateisystemkommandos 8.3.6 Dateieigenschaften ermitteln Mathematische Funktionen 8.4.1 Die mathematische Standardbibliothek 8.4.2 Komplexe Zahlen Zeitfunktionen 8.5.1 Datum und Uhrzeit 8.5.2 Zeit stoppen

376 378 381 382 384 385 385 387

Die Container-Klasse vector 9.1.1 Dimensionsänderung 9.1.2 Iteratoren 9.1.3 Weitere Funktionen Die Container-Klasse deque Die Container-Klasse list 9.3.1 Einfügen und Löschen 9.3.2 Umhängen von Elementen: splice 9.3.3 Mischen sortierter Listen 9.3.4 Sortierung und Reihenfolge Die Container-Klassen set und multiset 9.4.1 Einfügen und Löschen 9.4.2 Suchen und Sortieren Die Container-Klassen map und muitimap Container-Adapter 9.6.1 Der Container-Adapter stack 9.6.2 Der Container-Adapter queue 9.6.3 Der Container-Adapter priority_queue Iteratortypen Die Algorithmen der STL 9.8.1 Suchen: findO 9.8.2 Sortieren 9.8.3 Binäres Suchen 9.8.4 Kopieren: copyO 9.8.5 Umdrehen: reverseO

389 391 393 394 396 399 400 402 403 403 405 405 406 408 410 411 412 413 414 414 415 416 417 418 418

9.8.6

Füllen: fillO

419

9.8.7

equalO

9.8.8 Funktion als Parameter: findjfO 9.8.9 for_each Die Template-Klasse bitset

419 419 423 423

A

В

С D E

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 Compilereinrichtung B.1 KDevelop В.1.1 Neues Projekt B.1.2 Kompilieren und starten B.2 Bloodshed Dev-C++ (CD) B.2.1 Installation B.2.2 Ein Projekt anlegen B.2.3 Übersetzen und starten B.3 CygWin Musterlösungen Glossar Literatur

Index

427 427 432 432 434 435 436 440 440 443 445 448 452 456 458 460 463 463 463 465 466 466 467 469 471 473 493 497

499