Inhaltsverzeichnis Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Entwicklung und Eigenschaften von C++ . . . . . . . . . . . . . . . . . . . . . 24 Objektorientierte Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Erstellen eines C++-Programms . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Ein erstes C++-Programm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Struktur einfacher C++-Programme. . . . . . . . . . . . . . . . . . . . . . . . . 32 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2 Elementare Datentypen, Konstanten und Variablen . . 37 Elementare Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Konstanten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Escape-Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Namen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Die Schlüsselworte const und volatile . . . . . . . . . . . . . . . . . . . . . . . . 54 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3 Verwenden von Funktionen und Klassen . . . . . . . . . . . 61 Deklaration von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Aufruf von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Der Typ void für Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Header-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Standard-Header-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Verwenden von Standardklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 C++ Lernen und professionell anwenden 4 Ein- und Ausgaben mit Streams . . . . . . . . . . . . . . . . . 79 Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Formatierung und Manipulatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Formatierte Ausgabe von Ganzzahlen . . . . . . . . . . . . . . . . . . . . . . . 84 Formatierte Ausgabe von Gleitpunktzahlen. . . . . . . . . . . . . . . . . . . . 86 Ausgabe in Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Ausgabe von Zeichen, Strings und booleschen Werten . . . . . . . . . . . 90 Formatierte Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Formatierte Eingabe von Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Unformatierte Ein-/Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5 Operatoren für elementare Datentypen . . . . . . . . . . 103 Binäre arithmetische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Unäre arithmetische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Vergleichsoperatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Logische Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6 Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Die while-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Die for-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Die do-while-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Verzweigungen mit if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 else-if-Ketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Bedingte Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Auswahl mit switch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Sprünge mit break, continue und goto . . . . . . . . . . . . . . . . . . . . . . 134 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 8 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Inhaltsverzeichnis 7 Symbolische Konstanten und Makros . . . . . . . . . . . . 141 Makros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Makros mit Parametern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Arbeiten mit der #define-Direktive . . . . . . . . . . . . . . . . . . . . . . . . . 146 Bedingte Kompilierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Standardmakros zur Behandlung von Zeichen. . . . . . . . . . . . . . . . . 150 Umlenken von Standardeingabe und -ausgabe. . . . . . . . . . . . . . . . 152 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 8 Umwandlung arithmetischer Datentypen . . . . . . . . . 161 Implizite Typumwandlungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Verfahren bei arithmetischen Typumwandlungen . . . . . . . . . . . . . . 164 Implizite Typumwandlungen bei Zuweisungen . . . . . . . . . . . . . . . . 166 Weitere Typumwandlungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 9 Die Standardklasse string . . . . . . . . . . . . . . . . . . . . . 175 Definition und Zuweisung von Strings . . . . . . . . . . . . . . . . . . . . . . . 176 Verketten von Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Strings vergleichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Einfügen und Löschen in Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Suchen und Ersetzen in Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Zugriff auf Zeichen in Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 10 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Bedeutung von Funktionen in C++ . . . . . . . . . . . . . . . . . . . . . . . . 194 Erstellen eigener Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Return-Wert von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Übergabe von Argumenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 9 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 C++ Lernen und professionell anwenden inline-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Default-Argumente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Überladen von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Rekursive Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Platzhalter auto für Return-Typen . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 11 Speicherklassen und Namensbereiche . . . . . . . . . . . 221 Speicherklasse von Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Der Speicherklassen-Spezifizierer extern . . . . . . . . . . . . . . . . . . . . . 224 Der Speicherklassen-Spezifizierer static. . . . . . . . . . . . . . . . . . . . . . 226 Die Speicherklassen-Spezifizierer auto und register. . . . . . . . . . . . . 228 Speicherklassen-Spezifizierer von Funktionen . . . . . . . . . . . . . . . . . 230 Namensbereiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Das Schlüsselwort using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 12 Referenzen und Zeiger . . . . . . . . . . . . . . . . . . . . . . . 245 Definition von Referenzen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Referenzen als Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Referenzen als Return-Wert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Ausdrücke mit Referenztyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Definition von Zeigern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Der Verweisoperator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Zeiger als Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 13 Definition von Klassen . . . . . . . . . . . . . . . . . . . . . . . . 267 Klassen-Konzept. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Definition von Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 10 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Inhaltsverzeichnis Definition von Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Definition von Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Verwendung von Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Zeiger auf Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Structs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Lösung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 14 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Aufruf von Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Mehr Initialisierungsmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . 294 Destruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 Inline-Methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Zugriffsmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 const-Objekte und -Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Standardmethoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Standardmethoden kontrollieren . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Der this-Zeiger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 Übergabe von Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Objekte als Return-Wert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 15 Teilobjekte und statische Elemente . . . . . . . . . . . . . . 325 Klassen mit Teilobjekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 Elementinitialisierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Konstante Teilobjekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Statische Datenelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Zugriff auf statische Datenelemente . . . . . . . . . . . . . . . . . . . . . . . . 334 Aufzählungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 11 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 C++ Lernen und professionell anwenden 16 Vektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Vektoren definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 Initialisierung von Vektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 C-Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Klassen-Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Mehrdimensionale Vektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 Vektoren als Datenelemente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 17 Zeiger und Vektoren . . . . . . . . . . . . . . . . . . . . . . . . . 377 Vektoren und Zeiger (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Vektoren und Zeiger (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Zeigerarithmetik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Vektoren als Argumente von Funktionen. . . . . . . . . . . . . . . . . . . . . 384 Zeigerversion von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Read-Only-Zeiger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 Zeiger als Return-Wert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Zeigervektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Argumente aus der Kommandozeile . . . . . . . . . . . . . . . . . . . . . . . . 394 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 18 Grundlagen der Dateiverarbeitung . . . . . . . . . . . . . . 407 Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 File-Stream-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 File-Streams anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 Eröffnungsmodus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 Schließen von Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Blockweises Schreiben und Lesen . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Persistenz von Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 12 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Inhaltsverzeichnis 19 Operatoren überladen . . . . . . . . . . . . . . . . . . . . . . . 441 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 Operatorfunktionen (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Operatorfunktionen (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Überladene Operatoren verwenden . . . . . . . . . . . . . . . . . . . . . . . . 448 Globale Operatorfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 friend-Funktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 friend-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 Index-Operator überladen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 Shift-Operatoren für die Ein-/Ausgabe überladen . . . . . . . . . . . . . . 458 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 20 Typumwandlungen für Klassen . . . . . . . . . . . . . . . . . 471 Konvertierungskonstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Konvertierungsfunktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 Mehrdeutigkeit bei Typumwandlungen . . . . . . . . . . . . . . . . . . . . . . 476 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 21 Speicherreservierung zur Laufzeit . . . . . . . . . . . . . . . 483 Der Operator new . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Der Operator delete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 Dynamischer Speicher für Klassen . . . . . . . . . . . . . . . . . . . . . . . . . 488 Dynamischer Speicher für Vektoren . . . . . . . . . . . . . . . . . . . . . . . . 490 Anwendung: Einfach verkettete Listen . . . . . . . . . . . . . . . . . . . . . . . 492 Darstellung einer einfach verketteten Liste . . . . . . . . . . . . . . . . . . . 494 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 22 Dynamische Elemente . . . . . . . . . . . . . . . . . . . . . . . . 507 Datenfelder variabler Länge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 Eine Klasse mit dynamischem Element . . . . . . . . . . . . . . . . . . . . . . 510 Auf- und Abbau eines Objekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 13 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 C++ Lernen und professionell anwenden Die Implementierung der Methoden . . . . . . . . . . . . . . . . . . . . . . . . 514 Kopierkonstruktor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 Zuweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Verschieben von R-Werten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 Move-Konstruktor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Move-Zuweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 23 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 Konzept der Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 Abgeleitete Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 Elemente abgeleiteter Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 Elementzugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 Redefinition von Elementen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 Auf- und Abbau abgeleiteter Klassen . . . . . . . . . . . . . . . . . . . . . . . 548 Objekte abgeleiteter Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 protected-Deklarationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Weitere Zugriffseinschränkungen . . . . . . . . . . . . . . . . . . . . . . . . . . 554 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 24 Typumwandlung in Klassenhierarchien . . . . . . . . . . . 569 Konvertierung in Basisklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 Typumwandlung bei Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . . . 572 Konvertierung von Referenzen und Zeigern. . . . . . . . . . . . . . . . . . . 574 Explizite Typumwandlungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 25 Polymorphe Klassen . . . . . . . . . . . . . . . . . . . . . . . . . 583 Polymorphie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 Virtuelle Methoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 Abbau dynamischer Objekte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 14 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Inhaltsverzeichnis Virtuelle Methodentabelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Dynamische Casts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598 26 Abstrakte Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 Rein virtuelle Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 Abstrakte und konkrete Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 Zeiger und Referenzen auf abstrakte Klassen . . . . . . . . . . . . . . . . . 610 Virtuelle Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 Anwendung: Inhomogene Listen. . . . . . . . . . . . . . . . . . . . . . . . . . . 614 Implementierung einer inhomogenen Liste . . . . . . . . . . . . . . . . . . . 616 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 27 Mehrfachvererbung . . . . . . . . . . . . . . . . . . . . . . . . . . 627 Mehrfach abgeleitete Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 Mehrfache indirekte Basisklassen . . . . . . . . . . . . . . . . . . . . . . . . . . 630 Virtuelle Basisklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 Aufrufe von Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 Initialisierung virtueller Basisklassen . . . . . . . . . . . . . . . . . . . . . . . . 636 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642 28 Ausnahmebehandlung . . . . . . . . . . . . . . . . . . . . . . . 647 Traditionelle Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . 648 Exception-Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 Exception-Handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652 Auslösen und Auffangen von Exceptions . . . . . . . . . . . . . . . . . . . . . 654 Schachteln von Ausnahmebehandlungen . . . . . . . . . . . . . . . . . . . . 656 Definition eigener Fehlerklassen. . . . . . . . . . . . . . . . . . . . . . . . . . . 658 Standardfehlerklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 15 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 C++ Lernen und professionell anwenden 29 Mehr über Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . 677 Dateien für wahlfreien Zugriff öffnen . . . . . . . . . . . . . . . . . . . . . . . 678 Wahlfreies Positionieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 Wahlfreies Positionieren (Fortsetzung). . . . . . . . . . . . . . . . . . . . . . . 682 Dateistatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684 Exception-Handling für Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . 686 Persistenz von polymorphen Objekten . . . . . . . . . . . . . . . . . . . . . . 688 Persistenz von Objekten (Fortsetzung) . . . . . . . . . . . . . . . . . . . . . . . 690 Anwendung: Indexdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692 Implementierung eines Index-Dateisystems. . . . . . . . . . . . . . . . . . . 694 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700 30 Mehr über Zeiger . . . . . . . . . . . . . . . . . . . . . . . . . . . 721 Zeiger auf Zeiger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722 Variable Anzahl von Argumenten . . . . . . . . . . . . . . . . . . . . . . . . . . 724 Zeiger auf Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728 Komplexe Deklarationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730 Definition von Typnamen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732 Matrizen als Argumente von Funktionen . . . . . . . . . . . . . . . . . . . . . 734 Anwendung: Dynamische Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . 736 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740 31 Bitmanipulationen . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 Logische Bitoperatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750 Shift-Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 Bitmasken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 Verwenden von Bitmasken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 Bitfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762 16 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Inhaltsverzeichnis 32 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 Funktions- und Klassen-Templates . . . . . . . . . . . . . . . . . . . . . . . . . 768 Definition von Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770 Instantiierung von Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772 Template-Parameter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774 Template-Argumente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776 Spezialisierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778 Default-Argumente von Templates . . . . . . . . . . . . . . . . . . . . . . . . . 780 Explizite Instantiierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782 Variable Anzahl von Parametern. . . . . . . . . . . . . . . . . . . . . . . . . . . 784 Standard-Templates für Bitsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 33 Container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 Arten von Containern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802 Sequenzielle Container-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 Iteratoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806 Vereinbarung sequenzieller Container . . . . . . . . . . . . . . . . . . . . . . 808 Einfügen in sequenziellen Containern . . . . . . . . . . . . . . . . . . . . . . . 810 Elementzugriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812 Größe von Containern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814 Löschen in sequenziellen Containern . . . . . . . . . . . . . . . . . . . . . . . 816 Listenoperationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818 Assoziative Container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820 Sets und Multisets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822 Maps und Multimaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824 Initialisierungslisten und Range-for-Schleifen . . . . . . . . . . . . . . . . . 826 Hash-Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828 Ungeordnete assoziative Container . . . . . . . . . . . . . . . . . . . . . . . . 830 Hash-Tabellen für selbstdefinierte Typen. . . . . . . . . . . . . . . . . . . . . 832 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838 17 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 C++ Lernen und professionell anwenden 34 Smart Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848 Die Smart Pointer der Standardbibliothek . . . . . . . . . . . . . . . . . . . . 850 Smart Pointer vom Typ unique_ptr<T> einsetzen . . . . . . . . . . . . . . 852 Smart Pointer vom Typ unique_ptr<T> einsetzen (2) . . . . . . . . . . . . 854 Das Klassen-Template shared_ptr . . . . . . . . . . . . . . . . . . . . . . . . . . 856 Das Klassen-Template shared_ptr (2) . . . . . . . . . . . . . . . . . . . . . . . 858 Das Klassen-Template shared_ptr (3) . . . . . . . . . . . . . . . . . . . . . . . 860 Das Klassen-Template weak_ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . 862 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 868 35 Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880 Erzeugen und Ausführen von Threads . . . . . . . . . . . . . . . . . . . . . . . 882 Initialisierung und Zuweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884 Konkurrierende Speicherzugriffe. . . . . . . . . . . . . . . . . . . . . . . . . . . 886 Thread-ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888 Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890 Bedingungsvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892 Bedingungsvariablen (Fortsetzung) . . . . . . . . . . . . . . . . . . . . . . . . . 894 Übungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900 36 Algorithmen der Standardbibliothek . . . . . . . . . . . . . 907 Algorithmen: Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 Funktionsobjekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910 Lambda-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914 Algorithmen und Iteratoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916 Vordefinierte Iteratoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918 Nicht-modifizierende Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . 920 Modifizierende Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924 Mutierende Algorithmen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928 Sortieren und verwandte Operationen . . . . . . . . . . . . . . . . . . . . . . 930 18 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Inhaltsverzeichnis 37 Numerische Bibliothek . . . . . . . . . . . . . . . . . . . . . . . . 935 Komplexe Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936 Das Klassen-Template complex<T> . . . . . . . . . . . . . . . . . . . . . . . . 938 Methoden von complex<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940 Komplexe Funktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942 Das Klassen-Template valarray<T> . . . . . . . . . . . . . . . . . . . . . . . . 944 Zuweisung numerischer Vektoren . . . . . . . . . . . . . . . . . . . . . . . . . . 946 Arithmetische Operationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948 Weitere Operationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950 Selektive Indizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952 Verallgemeinerte selektive Indizierung . . . . . . . . . . . . . . . . . . . . . . 954 Verallgemeinerte selektive Indizierung (Forts.) . . . . . . . . . . . . . . . . 956 Indirekte und maskierte Indizierung . . . . . . . . . . . . . . . . . . . . . . . . 958 Anhang A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961 Binäre Zahlendarstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962 Präprozessor-Direktiven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965 Vordefinierte Standardmakros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971 Einbinden von C-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972 Operatorenübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 Vorrangtabelle für Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976 ASCII-Code-Tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977 Bildschirmsteuerzeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979 Compiler, Beispiele und Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . 980 Anhang B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983 Glossar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003 19 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Kapitel 1 Grundlagen Dieses Kapitel beschreibt die grundlegenden Eigenschaften der objektorientierten Programmiersprache C++. Außerdem werden die Schritte vorgestellt, die zur Erstellung eines lauffähigen C++-Programms erforderlich sind. Diese Schritte können Sie auf Ihrem System anhand von einführenden Beispielen nachvollziehen. Die Beispiele dienen auch dazu, die grundlegende Struktur eines C++-Programms darzustellen. 23 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Kapitel 1 C++ Lernen und professionell anwenden Entwicklung und Eigenschaften von C++ Charakteristische Eigenschaften 24 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Grundlagen Historisches Die Programmiersprache C++ wurde von Bjarne Stroustrup und seinen Mitarbeitern in den Bell Laboratories (AT&T, USA) entwickelt, um Simulationsprojekte objektorientiert und effizient implementieren zu können. Frühe Versionen, die zunächst als „C mit Klassen“ bezeichnet wurden, gibt es seit 1980. Der Name C++ weist darauf hin, dass C++ aus der Programmiersprache C hervorgegangen ist: ++ ist der Inkrementoperator von C. Schon 1989 wurde ein ANSI-Komitee (American National Standards Institute) gebildet, um die Programmiersprache C++ zu standardisieren. Hierbei geht es darum, dass möglichst viele Compilerbauer und Software-Entwickler sich auf eine einheitliche Sprachbeschreibung einigen, um die Bildung von Dialekten und „Sprachverwirrungen“ zu vermeiden. Anfang 1998 wurde von der ISO (International Organization for Standardization) der Standard für C++ (14882) verabschiedet, der 2003 erweitert und im Oktober 2011 wesentlich ergänzt wurde. Der neueste Standard von 2011 wird auch kurz mit C++11 bezeichnet. Eigenschaften von C++ C++ ist keine rein objektorientierte Sprache, sondern eine Hybridsprache (= „Mischsprache“): Sie enthält die Programmiersprache C als Teilmenge. Damit hat man zunächst alle Möglichkeiten, die auch C bietet: ● universell einsetzbare, modulare Programme ● effiziente, maschinennahe Programmierung ● Portabilität, d.h. Übertragbarkeit von Programmen auf verschiedene Rechner Insbesondere kann die umfangreiche in C entwickelte Software auch in C++Programmen verwendet werden. C++ unterstützt die Konzepte der objektorientierten Programmierung, nämlich: ● Datenabstraktion, d.h. Bildung von Klassen zur Beschreibung von Objekten ● Datenkapselung für den kontrollierten Zugriff auf die Daten von Objekten ● Vererbung durch Bildung abgeleiteter Klassen (auch mehrfach) ● Polymorphie (griech. „Vielgestaltigkeit“), d.h. die Implementierung von Anweisungen, die zur Laufzeit verschiedene Wirkungen haben können C++ wurde um zusätzliche Sprachelemente erweitert, wie z.B. Referenzen, Templates und Ausnahmebehandlung (engl. Exception Handling). Auch wenn diese Sprachelemente keinen direkten Bezug zur Objektorientierung haben, sind sie für deren effiziente Implementierung wichtig. 25 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Kapitel 1 C++ Lernen und professionell anwenden Objektorientierte Programmierung Traditionelles Konzept Objektorientiertes Konzept 26 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Grundlagen Klassische, prozedurale Programmierung Die traditionelle, prozedurale Programmierung trennt Daten und Funktionen (= Unterprogramme, Prozeduren), die diese Daten bearbeiten. Dies hat wichtige Konsequenzen für den Umgang mit den Daten in einem Programm: ● Der Programmierer muss selbst dafür sorgen, dass Daten vor ihrer Verwendung mit geeigneten Anfangswerten versehen sind und dass beim Aufruf einer Funktion korrekte Daten übergeben werden. ● Wird die Darstellung der Daten geändert, z.B. ein Datensatz erweitert, so müssen auch die zugehörigen Funktionen entsprechend angepasst werden. Beides ist natürlich fehleranfällig und nicht besonders wartungsfreundlich. Objekte Die objektorientierte Programmierung (OOP) stellt die Objekte in den Mittelpunkt, d.h. die Dinge, um die es bei der jeweiligen Problemstellung geht. Ein Programm zur Verwaltung von Konten beispielsweise arbeitet mit Kontoständen, Kreditlimits, Überweisungen, Zinsberechnungen usw. Ein Objekt, das ein Konto in einem Programm darstellt, besitzt dann die Eigenschaften und Fähigkeiten, die für die Kontoverwaltung wichtig sind. Die Objekte in der OOP bilden eine Einheit aus Daten (= Eigenschaften) und Funktionen (= Fähigkeiten). Mit einer Klasse wird ein Objekt-Typ definiert, der sowohl die Eigenschaften als auch die Fähigkeiten von Objekten dieses Typs festlegt. Die Kommunikation zwischen Objekten erfolgt dann durch „Nachrichten“, die die Fähigkeiten von Objekten aktivieren. Vorteile der OOP Für die Software-Entwicklung hat die objektorientierte Programmierung wesentliche Vorteile: ● geringere Fehleranfälligkeit: Ein Objekt kontrolliert den Zugriff auf seine Daten selbst. Insbesondere kann es fehlerhafte Zugriffe abwehren. ● gute Wiederverwendbarkeit: Ein Objekt verwaltet sich selbst. Es kann deshalb wie ein Baustein in beliebigen Programmen eingesetzt werden. ● geringer Wartungsaufwand: Ein Objekt kann die interne Darstellung seiner Daten an neue Anforderungen anpassen, ohne dass ein Anwendungsprogramm etwas davon merkt. 27 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Kapitel 1 C++ Lernen und professionell anwenden Erstellen eines C++-Programms Übersetzen eines C++-Programms 28 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Grundlagen Zum Erstellen und Übersetzen eines C++-Programms sind folgende drei Schritte notwendig: 1. Das C++-Programm wird mit einem Texteditor in eine Datei eingegeben. Anders gesagt: Der Quellcode wird in einer Quelldatei abgelegt. Bei größeren Projekten ist es üblich, modular zu programmieren. Dabei wird der Quellcode auf mehrere Quelldateien verteilt, die getrennt bearbeitet und übersetzt werden. 2. Die Quelldatei wird dem Compiler zur Übersetzung gegeben. Geht alles gut, so erhält man eine Objektdatei, die den Maschinencode enthält. Eine Objektdatei heißt auch Modul. 3. Schließlich bindet der Linker die Objektdatei mit anderen Modulen zu einer ausführbaren Datei. Die Module bestehen aus Funktionen der Standardbibliothek oder selbsterstellten, schon früher übersetzten Programmteilen. Im Namen der Quelldateien muss die richtige Endung angegeben werden. Diese hängt vom jeweiligen Compiler ab. Die gebräuchlichsten Endungen sind .cpp und .cc. Vor dem eigentlichen Kompiliervorgang können Header-Dateien, auch IncludeDateien genannt, in die Quelldatei kopiert werden. Header-Dateien sind Textdateien mit Informationen, die in verschiedenen Quelldateien gebraucht werden, wie z.B. Typdefinitionen oder die Deklaration von Variablen und Funktionen. Die Namen von Header-Dateien enden entweder mit .h oder haben keine Endung. Die C++-Standardbibliothek enthält fertige Funktionen und Klassen, die standardisiert sind und die jeder Compiler zur Verfügung stellt. Moderne Compiler bieten eine integrierte Entwicklungsumgebung, die die obigen drei Schritte zusammenfasst. Von einer einheitlichen Benutzeroberfläche aus wird das Programm editiert, kompiliert, gelinkt und ausgeführt. Außerdem können weitere Tools, wie z.B. ein Debugger, gestartet werden. Wichtig: Enthält die Quelldatei auch nur einen Syntaxfehler, so zeigt dies der Compiler mit einer Fehlermeldung an. Darüber hinaus können weitere Fehlermeldungen ausgegeben werden, die darauf beruhen, dass der Compiler versucht, trotz des Fehlers weiter zu übersetzen. Beginnen Sie also immer mit der Korrektur des ersten Fehlers in einem Programm. Neben den eigentlichen Fehlermeldungen gibt der Compiler auch Warnungen aus. Eine Warnung zeigt keinen Syntaxfehler an, sondern ist lediglich ein Hinweis auf einen möglichen logischen Fehler, wie beispielsweise die Verwendung einer nicht initialisierten Variablen. 29 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Kapitel 1 C++ Lernen und professionell anwenden Ein erstes C++-Programm Beispielprogramm #include <iostream> using namespace std; int main() { cout << "Viel Spaß mit C++!" return 0; } << endl; Bildschirmausgabe Viel Spaß mit C++! Die Struktur der Funktion main() 30 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Grundlagen Ein C++-Programm besteht aus Objekten mit ihren Elementfunktionen und aus globalen Funktionen, die zu keiner Klasse gehören. Jede Funktion löst eine bestimmte Aufgabe und kann andere Funktionen aufrufen. Sie ist entweder selbsterstellt oder eine fertige Routine aus der Standardbibliothek. Die globale Funktion main() muss immer selbst geschrieben werden und hat eine besondere Rolle: Sie bildet das Hauptprogramm. Anhand des nebenstehenden kurzen Beispielprogramms lassen sich bereits die wichtigsten Elemente eines C++-Programms erkennen. Das Programm enthält nur die Funktion main() und gibt eine Meldung auf dem Bildschirm aus. Die erste Zeile beginnt mit einem Doppelkreuz # und ist daher für den Präprozessor bestimmt. Der Präprozessor ist Teil der ersten Übersetzungsphase, in der noch kein Objektcode erzeugt wird. Mit #include <dateiname> kopiert der Präprozessor die genannte Datei an diese Stelle in den Quellcode. Dadurch stehen dem Programm alle Informationen zur Verfügung, die in dieser Datei enthalten sind. Die Header-Datei iostream enthält Vereinbarungen für die Ein-/Ausgabe mit Streams. Der Begriff Stream (dt. Strom) spiegelt die Situation wider, dass Zeichenfolgen wie ein Datenstrom behandelt werden. Die in C++ vordefinierten Namen befinden sich im Namensbereich std (standard). Die anschließende using-Direktive erlaubt, die Namen aus dem Namensbereich (Namespace) std direkt zu verwenden. Die Programmausführung beginnt mit der ersten Anweisung in der Funktion main(), die daher in jedem C++-Programm vorhanden sein muss. Nebenstehend ist die Struktur der Funktion dargestellt. Sie unterscheidet sich, abgesehen vom feststehenden Namen, nicht von der Struktur anderer Funktionen. In unserem Beispiel enthält die Funktion main() zwei Anweisungen. Die erste cout << "Viel Spaß mit C++!" << endl; gibt den Text Viel Spaß mit C++! auf dem Bildschirm aus. Der Name cout (console output) bezeichnet ein Objekt, das die Ausgabe durchführt. Die beiden Kleiner-Zeichen << deuten an, dass die Zeichen in den Ausgabestrom „geschoben“ werden. Mit endl (end of line) wird anschließend ein Zeilenvorschub ausgelöst. Die zweite Anweisung return 0; beendet die Funktion main() und damit das Programm. Dabei wird der Wert 0 dem aufrufenden Programm als Exit-Code zurückgegeben. Es ist üblich, den Exit-Code 0 zu verwenden, wenn das Programm korrekt abgelaufen ist. Beachten Sie, dass die Anweisungen mit einem Semikolon enden. Die kürzeste Anweisung besteht übrigens nur aus einem Semikolon und bewirkt nichts. 31 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Kapitel 1 C++ Lernen und professionell anwenden Struktur einfacher C++-Programme Ein C++-Programm mit mehreren Funktionen /****************************************************** Ein Programm mit mehreren Funktionen und Kommentaren ******************************************************/ #include <iostream> using namespace std; void linie(), meldung(); // Prototypen int main() { cout << "Hallo! Das Programm startet in main()." << endl; linie(); meldung(); linie(); cout << "Jetzt am Ende von main()." << endl; return 0; } void linie() // Eine Linie ausgeben. { cout << "--------------------------------" << endl; } void meldung() // Eine Meldung ausgeben. { cout << "In der Funktion meldung()." << endl; } Bildschirmausgabe Hallo! Das Programm startet in main(). -----------------------------In der Funktion meldung(). -----------------------------Jetzt am Ende von main(). 32 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Grundlagen Das nebenstehende Beispiel zeigt, wie ein C++-Programm strukturiert ist, das aus mehreren Funktionen besteht. Die Reihenfolge, in der Funktionen definiert werden, ist in C++ nicht vorgeschrieben. Zum Beispiel könnte auch zuerst die Funktion meldung(), dann die Funktion linie() und schließlich die mainFunktion geschrieben werden. Üblicherweise wird die Funktion main() zuerst angegeben, da sie den Programmablauf steuert. Es werden also Funktionen aufgerufen, die erst später definiert werden. Dies ist möglich, da der Compiler mit dem Prototyp einer Funktion die notwendigen Informationen erhält. Neu in diesem Beispiel sind die Kommentare. Jede Zeichenfolge, die durch /* . . . */ eingeschlossen ist oder mit // beginnt, ist ein Kommentar. Beispiele: /* Ich darf mehrere Zeilen lang sein */ // Ich bin ein Einzeilen-Kommentar Beim Einzeilen-Kommentar ignoriert der Compiler ab den Zeichen // alle Zeichen bis zum Zeilenende. Kommentare, die sich über mehrere Zeilen erstrecken, sind bei der Fehlersuche nützlich, um ganze Programmteile auszublenden. Jede der beiden Kommentarformen kann auch benutzt werden, um die andere auszukommentieren. Zum Layout einer Quelldatei: Der Compiler bearbeitet jede Quelldatei sequenziell und zerlegt den Inhalt in „Token“ (kleinste Bestandteile), wie z.B. Funktionsnamen und Operatoren. Token können durch beliebig viele Zwischenraumzeichen getrennt sein, also durch Leer-, Tabulator- oder Newline-Zeichen. Es kommt daher nur auf die Reihenfolge des Quellcodes an, nicht auf ein bestimmtes Layout, wie etwa die Aufteilung in Zeilen und Spalten. Beispielsweise ist void meldung ( ){ cout << "In der Funktion meldung()." << endl;} zwar eine schlecht lesbare, aber korrekte Definition der Funktion meldung(). Eine Ausnahme hinsichtlich des Layouts bilden die Präprozessor-Direktiven, die stets eine eigene Zeile einnehmen. Dem Doppelkreuz # zu Beginn einer Zeile dürfen nur Leer- und Tabulatorzeichen vorangehen. Zur besseren Lesbarkeit von C++-Programmen ist es von Vorteil, einen einheitlichen Stil in der Darstellung beizubehalten. Dabei sollten Einrückungen und Leerzeilen gemäß der Programmstruktur eingefügt werden. Außerdem ist eine großzügige Kommentierung wichtig. 33 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Kapitel 1 C++ Lernen und professionell anwenden Übungen Programm-Listing zur 3. Aufgabe #include <iostream> using namespace std; void pause(); // Prototyp int main() { cout << endl << "Lieber Leser, " << endl << "goennen Sie" << " sich jetzt eine "; pause(); cout << "!" << endl; return 0; } void pause() { cout << "PAUSE"; } 34 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Grundlagen 1. Aufgabe Erstellen Sie ein C++-Programm, das den folgenden Text auf dem Bildschirm ausgibt: Moegen taeten wir schon wollen, aber koennen haben wir uns nicht getraut! Verwenden Sie den Manipulator endl an den entsprechenden Stellen. 2. Aufgabe Das folgende Programm enthält lauter Fehler: */ Hier sollte man die Brille nicht vergessen // #include <stream> int main { cout << "Wenn dieser Text", cout >> " auf Ihrem Bildschirm erscheint, "; cout << " endl;" cout << 'können Sie sich auf die Schulter ' << "klopfen!" << endl. return 0; ) Korrigieren Sie die Fehler, und testen Sie die Lauffähigkeit des Programms. 3. Aufgabe Was gibt das nebenstehende C++-Programm auf dem Bildschirm aus? 35 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Kapitel 1 C++ Lernen und professionell anwenden Lösungen Zur 1. Aufgabe: // Auf geht's ! #include <iostream> using namespace std; int main() { cout << cout << cout << cout << "Moegen " << endl; "taeten wir schon wollen" << endl; "aber koennen " << endl; "haben wir uns nicht getraut!" << endl; return 0; } Zur 2. Aufgabe: Die korrigierten Stellen sind unterstrichen. /* Hier sollte man die Brille nicht vergessen */ #include <iostream> using namespace std; int main() { cout << "Wenn dieser Text"; cout << " auf Ihrem Bildschirm erscheint, "; cout << endl; cout << "können Sie sich auf die Schulter " << "klopfen!" << endl; return 0; } Zur 3. Aufgabe: Die Bildschirmausgabe des Programms beginnt in einer neuen Zeile: Lieber Leser, goennen Sie sich jetzt eine PAUSE! 36 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis A Abbau dynamischer Objekte 589 von Objekten 297 Ableitung mehrfache 629 abs() 941, 951 Absolutwert 131, 963 abstrakt Klasse 609 Abstraktion durch Klassen 269 acos() 951 Adapterklasse 805 Addition von Zeigern 381 Adresse 256 des aktuellen Objekts 309 Übergabe 249 Vektor 385 von Objekten 255, 279 von Zeigern 255 Adressoperator 442 Adressraum von Hash-Dateien 698 Änderungsfreundlichkeit 143 Aktualisieren von Dateien 415 algorithm 70 Algorithmus 909 binäre Suche 697, 812 Bresenham- 789 Bubble-Sort- 363 Heap-Sort- 933 Hot-Potatoe 835 Misch- 497 Mischen 814 modifizierender 925 mutierender 929 Quick-Sort- 729, 739 Selection-Sort- 397, 723, 739 Sieb des Eratosthenes 363 Splice- 497 Aliasname 247 allocate_shared() 861 allocator 805 Allokator-Klasse 805 Alternative auswählen 133 Ampersand 247 Analyse 269 Anfangswert 53, 73, 291 eines Objekts 293 von Objekten 275 Ansi.sys 979 ANSI-Komitee 25 Anweisung 31 abhängige 119 break 133, 135 continue 135 goto- 135 if else 127 return() 199 switch 133 throw 651 Anwenderprogramm Quellcode 273 app 414 Applikation 881 apply() 951 arg() 941 argc 395 argptr 725 Argument 65, 197, 199 Kommandozeilen- 395 komplexes 937 Objekt als 311 obligatorisches 725 optionales 725 Typumwandlung 169 -Übergabe 201 variable Anzahl 725 Vektor als 385 -Zeiger 725 Zeigervektor 723 argv 395 Arithmetik mit Zeigern 381, 383 Array 351 assoziativer 457 -Klasse 456 Klassen- 357 ASCII-Code 39 Tabelle 977 asin() 951 assert.h 70 assoziativ Array 457 Container 803 Asynchronous Transfer Mode 759 at() 187, 813 atan() 62, 951 atan2() 62, 951 ate 414 ATM-Zelle 759 Auflösung 787 Aufruf Exception-Handler 655 Funktions- 199 impliziter 297 redefinierter Methoden 551 von Destruktoren 297, 549 von Funktionen 65 von Konstruktoren 549 Aufzählung 337 Ausdruck 105 boolescher 45 komplexer 105 logischer 113 mit Referenztyp 253 Typ 105 Vergleichs- 111 Wert 105 Ausgabe 31, 80 dezimale 85 hexadezimale 85 linksbündig 89 oktale 85 rechtsbündig 89 1003 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis -Strom 83 umlenken 153 unformatierte 97 von booleschen Werten 91 von Strings 91 von Zeichen 91 Ausgabefeld 89 Ausnahmebehandlung 651 schachteln 657 Ausrichtung 89 byteweise 970 Auswahl 127, 133 Auswahloperator 131 auto 211, 229 auto_ptr 850 automatisch 223 AVL-Baum 821 B back() 813 Backslash 49 Backspace 93 bad() 685 bad_cast 593 Basis 93, 964 Basisinitialisierer 549, 635 bei Mehrfachvererbung 637 Basisklasse 539 direkte 541 indirekte 541 mehrfache 633 mehrfache indirekte 631 virtuelle 633 Basisklassenzeiger 575 Basistyp 255 Baum 695 AVL- 821 Rot-Schwarz- 821 Baumstruktur 803 bedingt Bewertung 131 Kompilierung 149 Bedingung zusammengesetzte 113 Bedingungsvariable 893 begin() 807, 833 Begrenzungszeichen 97 Belegungsfaktor 829 BELL 125 Benutzeroberfläche 29 Bereich capture 915 Iteratoren- 909 private 271 public 271 Bereichsoperator 233, 273, 333 Bereichsprüfung 187, 291, 301 Bewertung bedingte 131 -Reihenfolge 113 Bezeichner 63, 233 Read-Only 247 Beziehung Hat- 539 Ist- 539 Bias 964 Bibliothek 195 iostream- 81 numerische 935 bidirektional Iterator 807 Bildschirm Steuerzeichen 145, 979 -Treiber 979 binär 962 Binärmodus 419, 679 binär Suche 933 binary 414 Bindung dynamische 591 späte 591 statische 591 Bit -Codierung 751 eof- 415 fail- 415 -Feld 759 invertieren 755, 789 löschen 755, 789 Maske 755 -Muster 85, 164, 755, 962, 964 -Operation 751 -Operator 751, 789 Paritäts- 757 Schreiben 789 -Set 787 setzen 755, 789 Vorzeichen- 962 Bitoperator 415 bitset 70 Block 119, 227 catch 653 einer Funktion 197 extern 972 try- 653 blockorientiert 409 blockweise Schreiben/Lesen 419 bool 39 boolalpha 91 break Anweisung 133, 135 Breite eines Bitfelds 759 Bresenham-Algorithmus 789 Bruch kürzen 479 Rechenoperationen 460 Bubble-Sort 363 Buchstabe umwandeln 151 Bucket 829 Byte 41 Ausrichtung 970 -Offset in Dateien 681 -Position 409 C C -Bibliotheken einbinden 972 -Funktion definieren 973 -Funktion einbinden 972 -Header-Datei 71, 972 -String 71 C++ -Programm 29 -Standardbibliothek 73, 195 call by reference 201, 249, 311 call by value 201, 249, 311 case Konstante 133 Marke 133 1004 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis Cast Down- 593 dynamischer 593 expliziter 577 -Operator 169, 577 statischer 577 Up- 577 catch 653 cctype 151 cerr 80 cfloat 43, 964 char 39, 91 -Vektoren 355 CHAR_MAX 41 CHAR_MIN 41 char16_t 39 char32_t 39 cin 80, 253 class 271, 281 clear() 92, 685, 817 Client 897 climits 41, 964 clog 80 close() 417 cmath 63 Code von Funktionen 147 Comparator -Klasse 805 Compare 805 Compiler 29 Compilierung bedingte 967 complex 70, 939 COMSPEC 398 condition_variable 893 conio.h 154 conj() 943 const 55, 249 Methode 303 -Objekt 303 const_iterator 807, 833 Container Arten 803 -Bibliothek 803 Kapazität 815 -Klasse 805 -Länge 815 Löschen 817 sequenziell 803 ungeordneter 829 vereinbaren 809 Zugriff 813 continue -Anweisung 135 Cooked Modus 414 copy() 925 cos() 62, 943 cosh() 943 count() 825 cout 31, 80, 253 cshift() 951 cstdlib 67 C-String 355 ctime() 189 ctype.h 70, 151 Cursor 787 D Darstellung binäre 962, 963 dezimale 85 exponentielle 87 Festpunkt- 87 -Format 962 interne von Daten 269 von Ganzzahlen 962 von Gleitpunktzahlen 964 Datei 409 aktuelle Position 409 -Anfang 681 ausführbare 29, 195 -Ende 415, 681 Geräte- 683 Hash- 698 Index- 693 kopieren 417 lesen 409 -Name 413 öffnen 413 Pizza- 423 Primär- 693 -Puffer 409 schließen 417 schreiben 409 -Status 685 umlenken 153 -Zugriff 409 Dateiende 150 Dateiposition ändern 679 Daten verschlüsseln 761 Datenabstraktion 25, 539 Datenelement 73 abgeleiteter Klassen 543 dynamisches 509 konstantes 331 Speicherplatz 273 statisches 333 variabler Länge 509 von Klassen 269 Datenkapselung 25, 269, 281, 335, 455 Datenkommunikation 835 Datensatz 281, 409 Datensegment 227 Datenstruktur dynamische 493 rekursive 495 Datentyp 39 bool 39 char 39 const_iterator 807 double 43 elementarer 39 float 43 ganzzahliger 41 -Hierarchie 163 int 41 ios 681 iostate 685 Klasse 269 long 41 long double 43 short 41 time_t 285 void 43, 67, 199 von Variablen 53 wchar_t 39 Datenübertragung Fehlererkennung 757 Datum 285, 317 Deadlock 891 dec 84 Default Argumente von Funktionen 205 -Konstruktor 293 default -Marke 133 default_delete 851 1005 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis defined 968 Definition abgeleitete Klasse 540 Funktion 197 inline 203 rekursiver Funktionen 209 typedef 733 virtueller Methoden 587 von File-Streams 413 von Klassen 271 von Konstruktoren 291 von Methoden 273 von Objekten 275 von Referenzen 247 von Typnamen 733 von Variablen 53 von Vektoren 351 Deklaration Exception 653 extern- 225, 972 friend- 455 komplexe 731 protected 553 using- 235 von Funktionen 63 von Konstruktoren 291 von Variablen 225 Dekrement -Operator 107 delete 487, 489, 589 Deleter 855, 861 selbstdefiniert 861 deque 805 dequeue 70 Design von Klassenhierarchien 633 Destruktor 297 abgeleiteter Klassen 549 Aufruf 297 Default- 297 für Vektorklasse 513 inline 299 Minimalversion 297 virtueller 589 detach() 889 dezimal 45 Dezimalpunkt 86 Diagramm Vererbungs- 631, 635 Dimension von Vektoren 359 Direktive 31, 965 #define 143, 147 #elif 967 #endif 149, 967 #error 970 #if 967 #ifdef 149, 969 #ifndef 149 #include 63, 967 #line 969 #pragma 970 #undef 149, 966 using 71, 235 Division 105 ganzzahlige 105 mit Zweier-Potenzen 753 domain_error 660 Doppelpunkt 135 DOS 153 double 43 do-while -Schleife 125 Down-Cast 577 Download 980 draw() 787 Dreiecksmatrix 959 dynamic_cast<> 593 dynamisch Bindung 591 Datenelement 509 Datenstruktur 493 Matrix 737 Speicherreservierung 485 E Einbinden von C-Funktionen 972 Einfügen in Containern 811 in Index-Datei 695 in Strings 183 in Maps 825 Eingabe 80 fehlerhafte 95 -Feld 93 formatierte 92 -Puffer 93 Textzeile 97 umlenken 153 unformatierte 97 von Gleitpunktzahlen 95 von Zahlen 94 Eingabepuffer löschen 92 Einheit imaginäre 937 Einheitswurzel komlexe 953 Einlesen Siehe Eingabe Einmaleins 137 Element abgeleiteter Klassen 543 dynamisches 509 eines Vektors 351 -Zugriff 271 elementar Operation 493 Elementfunktion 31, 73, 269 statische 335 Elementinitialisierer 329, 549 else -Zweig 127 else-if -Kette 129 emplace() 811, 823 empty() 815 end() 807, 833 endl 83 Endlosschleife 123 Entpacken rekursiv 785 Entwicklungsumgebung integrierte 29, 212, 273 enum 337 env 404 Environment 399 eof() 415, 685 erase() 183, 817, 823 Eratosthenes Sieb des 363 Eröffnungsmodus -Flag 415 für Dateien 413 errno.h 70 Ersatztext 143, 965 Ersetzen in Strings 185 1006 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis Erweiterung 145 Ganzzahl- 163, 753 Null- 165 Vorzeichen- 165 ESC 979 Escape-Sequenz 49, 145 Euler 943 Exception 187 auffangen 653 auslösen 651 bad_cast 593 -Deklaration 653 -Handler 653 -Handler genereller 655 -Handling 651 -Handling für Dateien 687 -Spezifikation 657 exception 70 exceptions() 687 exit() 417 Exit-Code 31 Exklusiv ODER 751 exp() 62, 943, 951 explicit 477 explizit Cast 577 inline 299 Exponent 214, 964 Exponentialdarstellung komplexer Zahlen 943 exponentiell Darstellung 87 extend sign- 165 zero- 165 extern 231 Speicherklasse 225 F fail() 415, 685 failbit 415 Fakultät 213 false 39, 111 Fehler -Behandlung traditionelle 649 -Code 417 -Flag 649 -Meldung 393 -Nummer 393 -Objekt 651 -Situation 649 -Variable 649 Fehlerbehandlung für Dateien 415 für new 487 Fehlererkennung bei Datenübertragung 757 Fehlerflag 95 Fehlerklasse 651 bad_cast 593 definieren 659 domain_error 660 exception 661 invalid_argument 660 length_error 660 logic_error 661 out_of_range 813 overflow_error 660 range_error 660 runtime_error 661 underflow_error 660 Fehlermeldung 29, 65, 303 des Präprozessors 970 Feld Bit- 759 Feldbreite 85, 89, 93 Festplatte 409 Festpunktdarstellung 87 Festpunktzahl 86 Fibonacci -Quotient 353 -Zahl 353 FIFO-Prinzip 803 File-Stream Definition 413 -Klassen 411 fill() 88 Filterprogramm 151, 153 finale Klasse 541 finale Methoden 586 find() 185, 825, 921 first 825 fixed 86 Flag 45, 415 Eröffnungsmodus- 414 Fehler- 649 ios 685 Positionierungs- 681 Status- 415, 685 von ios 83 flip() 789 float 43 float.h 70 floating point types 42 for -Schleife 121 for_each() 913, 921 Form normalisierte 964 Format IEEE- 964 Formatierung 83 Formel Eulersche 943 Forward-Iterator 917 Fourier-Transformierte 953 Freispeicher 485 Freund 455 friend -Deklaration 455 -Funktion 453 -Klasse 455 -Konzept 453 front() 813 fstream 70, 411 Füllzeichen 89 functional 70 Funktion Aufruf 65, 199 Block 197 definieren 197 Deklaration 199 externe 231 friend- 453 globale 31, 195, 311 Hash- 698, 829 inline- 203 inverse trigonometrische 951 Kopf 197 main() 31 Merge- 497 Name 197 Operator 445 Prototyp 197 rekursive 209 Return-Wert 199 Signatur 207 Speicherklasse 231 Splice- 497 static- 231 1007 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis transzendente 943 trigonometrische 943 Typ 197 überladen 207 Version 205 Zeigerversion 387 Funktionsobjekt 911 vordefiniertes 913 G Ganzzahl 962 -Erweiterung 163, 753 positive 962 Geltungsbereich global 225 von Variablen 223 Genauigkeit 43, 87, 964 Generator Programm 969 Gerade zeichnen 789 Geschwindigkeit 129 vergleichen 739 get() 97 get_id() 889 getch() 154 getline() 73, 97, 177, 421 Gleichung quadratische 260 Gleitpunktdarstellung 43 Gleitpunktdivision 443 Gleitpunktkonstante 47 Gleitpunkttyp 43 Gleitpunktzahl 43, 47, 87 interne Darstellung 964 global Funktion 195 Variable 53 Vektor 353 good() 685 goto -Anweisung 135 Grad 945 Großbuchstabe 151 H Handler Exception- 653 Hash Datei 698 Funktion 698 Hashfunktion 829 Hash-Tabelle 803, 829 Hat-Beziehung 327, 539 Hauptwert komplexe Zahl 937 Logarithmus 943 Header von ATM-Zellen 758 Header-Datei 29, 69, 147, 149, 273, 964 C- 972 cctype 151 cfloat 43, 964 climits 41, 964 complex 939 conio.h 154 cstdlib 67 ctype.h 151 deque 804 fstream 411 iostream 31, 69 list 804 map 820 memory 850 queue 804 set 820 stack 804 stdlib.h 67 string 71, 177 Suche nach 967 valarray 945 vector 804 Heap 485, 933 Heap-Sort-Algorithmus 933 hex 84 hexadezimal 45, 85 Hierarchie der Fehlerklassen 661 von Datentypen 163 high value 172 Horner-Schema 947 Hot-Potato-Algorithmus 835 HUGE_VAL 214 Hyperbelfunktion 943 I Identifier 63 IEEE 42 IEEE-Format 964 if-else-Anweisung 127 ifstream 411 imag() 941 imaginär Einheit 937 Imaginärteil 937 Implementierung von Klassen 301 implizit inline 299 Typanpassung 163 in 414 INCLUDE 967 Include-Datei 29 include-Verzeichnis 69 Index 187, 683 -Datei 693 -Operator 187, 813 -Operator für Vektorklasse 515 -Operator überladen 457 -Überprüfung 187 unzulässiger 187 Vektor- 351 -Version 387 Indizierung indirekte 959 maskierte 959 selektive 953 Inhalt von Unions 283 inhomogen Liste 615 Initialisierung - direkte 295 explizite 489 -Liste 299 mit Konstruktoren 291 statischer Objekte 227 Vektor 353 vereinheitlichte 827 virtueller Basisklassen 637 von const-Objekten 303 von Datensätzen 281 von Klassen-Arrays 357 von Objekten 293 von Referenzen 247 von Strings 177 von Teilobjekten 329 von Variablen 53 1008 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis Initialisierungsliste 827 Inititialisierung von Objekten 275 von Schleifen 121 Inkonsistenz Betriebsmittel 887 Inkrement -Operator 107 inline 203 -Methoden 299 input() 727 insert() 183, 810, 823 Insert-Iterator 919 Instanz 73 von Klassen 275 int 41 INT_MAX 41 INT_MIN 41 integral promotion 163 integral types 42 Interface polymorphes 611 internal 88 Interpretation von Bitmustern 165 invalid_argument 660 Invertieren von Bits 755 von Listen 819 iomanip 70, 87 ios 70, 81, 83, 414 ios::badbit 685 ios::beg 681 ios::cur 681 ios::end 681 ios::eofbit 685 ios::failbit 685 ios::goodbit 685 ios::seekdir 681 iosfwd 70 iostate 685 iostream 31, 69, 70, 81 is_open() 417 isalnum() 150 isalpha() 150 isdigit() 150 islower() 150, 151 iso646.h 70 isprint() 150 isspace() 150 Ist-Beziehung 539 istream 70, 81 isupper() 150 Iterator 807, 917 bidirektionaler 807, 917 Forward 917 Input 917 Insert 919 Output 917 Random-Access 807, 917 Stream 917 iterator 70, 807, 833 J join() 883 K kbhit() 154 Kellerstapel 803 Kette else-if- 129 Key to Address Transformation 698 Klammern 145 Klasse complex 939 finale 541 gslice 955 HashEntry 699 HashFile 699 Index 685 IndexEntry 683 IndexFile 695 KontoFile 691 Polynom 945, 947 slice 953 thread 883 valarray 945 VekQueue<T> 835 Klasse Siehe auch Standardklasse 445 abgeleitete 539 abstrakte 609 Adapter- 805 Ampel 337, 341 Angestellter 611 Arbeiter 609 Array- 456 Artikel 315, 339 Basis- 539 Cell 615 Comparator 805 Container 805 Datum 285, 317 DayTime 445 Definition 271 Euro 447 File-Stream- 411 FloatVek 456, 509, 527 Fraction 461 friend- 455 für Brüche 461 für Vektoren 457 GiroKonto 557 InhomList 617 iostream 81 istream 81 Kfz 539, 543 Kombi 633 konkrete 609 Konto 271, 421 Konzept 269 Liste 495 Lkw 557 Matrix 737 mehrfach abgeleitete 629 MessStation 454 Messwert 327, 454 Mitarbeiter 607 Mitglied 339 ostream 81 PackedFood 559 Pkw 543 polymorphe 585 Product 559 sortVec 809 SparKonto 557 StadtAuto 595 Standard- 73 TelList 361, 365, 425 Transporter 641 Typumwandlung 473 UnpackedFood 559 Wohnwagen 639 Zeile 737 zur Darstellung von Vektoren 361 1009 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis Klassen-Array 357 Klassenhierarchie Design 633 Typumwandlung 571 Klassenvariable 333 Kleinbuchstabe 151 Koeffizient 945 Kollision beim Hashing 698 Kommando 153 -Interpreter 417 -Zeile 212 Kommandozeile Argumente 395 Kommaoperator 123, 442 Kommentar 33 Kompatibilität zu C 281 Kompilierung bedingte 149 Komplement Zweier- 963 komplex Deklaration 731 konkret 609 Konstante 45 boolesche 45 case- 133 enum- 337 Gleitpunkt- 47 klassenspezifische 337 numerische 45 String- 47 symbolische 141, 143, 965 Zeichen- 47 Konstruktor 291 abgeleiteter Klassen 549 Aufruf 293 Default- 293 Definition 291 Delegation 295 explicit 477 für Vektorklasse 513 inline- 299 Kopier- 305, 517 Minimalversion 293 Move- 521 überladen 291 Konto 271 Kontrollblock 857 Konvention Namens- 271 Konvertierung für Klassen 473 -Funktion 473 in Basisklasse 571 -Konstruktoren 472 von Argumenten 169 von Ganzzahlen 165 von Referenzen 575 von Smart Pointern 859 von Zeigern 575 Kopie Rückgabe 313 von Objekten 311 Kopier-Konstruktor 305, 517 Kürzen von Brüchen 479 L Länge von Strings 73, 177 von Vektoren 385 Lambda -Ausdruck 914 -Funktionen 914 Länge numerischer Vektor 945 Laufbedingung 119 Laufzeit 203, 299 Layout 129 ldexp() 62 Lebensdauer automatisch 223 statisch 223, 227 von Variablen 223 left 88 length() 73, 177 length_error 660 Lesbarkeit 143 Lesen aus Dateien 409 blockweises 419 less 805 lexikografisch 181 LIFO-Prinzip 201, 803 limits 70 limits.h 70 linear Lösung beim Hashing 698 Linearisierung 955 Linker 29, 195 linksbündig 89 list 70, 805 Liste 527 Container 805 doppelt verkettete 805 einfach verkettete 493 einfügen 617 für Vektorelemente 353 inhomogene 615, 859 Initialisierungs- 281 invertieren 819 mischen 819 Operationen 819 Parameter 197 sortieren 819 verschweißen 819 von Elementinitialisierern 329 von Exceptions 657 Listenelement 493 Literal 45 load factor 829 locale 70 locale.h 70 localtime() 285 lock() 887 lock_guard 891 Löschen in Containern 817 in Sets 823 in Strings 183 von Bits 755 Lösung lineare, beim Hashing 698 log() 62, 943, 951 log10() 62, 943, 951 lokal 201, 223 Variable 53 Vektor 353 long 41 long double 43 long long 41 L-Wert 257 M main() 197 Parameter 395 make_heap() 933 1010 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis make_shared() 861 MAKE-Utility 195 Makro 141, 143, 965 __cplusplus 971 __DATE__ 971 __FILE__ 971 __LINE__ 971 __STDC__ 971 __TIME__ 971 isalnum() 150 isalpha() 150 isdigit() 150 islower() 150, 151 isprint() 150 isspace() 150 isupper() 150, 151 mit Parametern 145 -Namen 143 tolower() 151 toupper() 151 va_end() 727 va_start() 725 Mandelbrot-Menge 940 Manipulation von Bits 789 Manipulator 83 Mantisse 964 Map 803 Einfügen 825 ungeordnete 831 vereinbaren 825 map 70, 820 Marke 135 case- 133 default- 133 private 271 public 271 maschinenabhängig 964 Maschinencode 29, 197 von Methoden 275 Maschinenregister 41 Maske Bit- 755 Massenspeicher 409 math.h 70, 214 Matrix 359, 955 dynamische 737 max() 951 max_size() 815 Mehrdeutigkeit bei Mehrfachvererbung 631 bei Typumwandlungen 207, 477 Mehrfachvererbung 629 member 271 memory 70, 850 Menüauswahl 133 merge() 497, 819, 931 Methode 73, 269 Definition 273 Dummy- 607 finale 586 inline 299 Read-Only- 303 Standard- 305 statische 335 virtuelle 585 virtuelle definieren 587 min() 951 Minor 957 Mischen von Listen 819 von Vektoren 497 Modifizierer 41 Modul 29, 195, 223, 273 modulglobal 223, 227 Funktion 231 Modulo -Division 105 Modus Binär- 419 Cooked 414 Raw 414 update- 415 move() 787 Move-Konstruktor 521 Move-Zuweisung 525 Multimap 820, 821, 825 ungeordnete 831 Multiplikation mit Zweier-Potenzen 753 Multiset 820, 823 ungeordnetes 831 Mutex 887 rekursiv 891 N Name 51, 233 Deklaration von 63 Funktion 197, 729 Regeln für die Vergabe 271 Suche 545 verdecken 547 von Bitfeldern 759 von Klassen 271 von Konstruktoren 291 von Makros 143 von Vektoren 351, 379 Namensbereich 71, 223, 233 Namenskonflikt 71, 233 namespace 71, 233 new 70, 485 New-Handler 487 Newline 73 NICHT 751 NICHT-Operator 113 noboolalpha 91 Norm komplexer Zahl 943 norm() 943 noshowpoint 86 noshowpos 84 Not-any-thread 889 Notation exponentielle 87 Postfix 107 Präfix- 107 notify_one() 895 nouppercase 84 NULL 256 Null-Erweiterung 165 numeric 70 numeric_limits 964 O Objekt 27, 53, 73 Abbau 297, 589 abgeleiteter Klassen 551 Adresse 309 als Argument 311 als Return-Wert 313 auto- 229 const- 303 Definition 275 degeneriertes 955 Eigenschaften 269 Fähigkeiten 269 global 223 in Datei speichern 421 konstant 55 1011 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis lokal 201, 223 modulglobal 223, 227 Name 225 persistent 689 Persistenz 421 Read-Only- 55 statisches 227 Typ 225 -Übergabe 311 Zeiger auf 279 zuweisen 277 Objektdatei 29 Objektsammlung 803 obligatorisch Argument 725 oct 84 ODER 751 exklusiv 750, 751 ODER-Operator 113 öffentlich 73 Schnittstelle 543, 555 Öffnen von Dateien 413 ofstream 411 oktal 45 OOP Siehe Programmierung, objektorientierte open() 413 openmode 414 Operand 105 symmetrischer 449 Operation 105 elementare 493 für Container 803 für Listen 819 Invertieren 819 Mischen 819 Splice- 819 Operator 233, 273 939 - 107, 939 -- 107 ! 113 != 111, 939 # 965 ## 966 % 939 & 751 && 113 () 169 * 257, 939 *= 947 + 107, 179, 939 ++ 107 += 179, 947 , 123 . 277 / 939 /= 947 :: 273, 333 < 111 << 81, 253, 751 <= 111 -= 947 = 109, 277 == 111, 939 -> 279 > 111 >= 111 >> 81, 177, 253, 751, 939 ? 131 ^ 751 | 415, 751 || 113 ~ 751 arithmetischer 105 Auswahl- 131 Bereichs- 273, 333 binärer 105 Bit- 751 boolescher 113 Cast 169, 577 defined 968 Dekrement- 107 delete 487, 489 dynamic_cast<> 593 -Funktion 445 -Funktion als Methode 449 Funktion globale 451 Funktion virtuelle 613 Index- 187, 813 Inkrement- 107 Komma- 123 logischer 113 logischer Bit- 751 mit Referenztyp 253 new 485, 489 NICHT 113, 751 nicht überladbarer 443 ODER 113, 751 Pfeil- 279 Punkt- 277 Shift- 751, 753 Shift- überladen 459 sizeof 43 überladbarer 442 -Überladung 442 unärer 105 unärer arithmetischer 106 UND 113, 751 Vergleichs- 111 Verweis- 257 virtueller 613 Vorzeichen 107 Zuweisungs- 109, 277, 519 operator-() 452 operator*() 452 operator+() 452 operator+=() 446 operator/() 452 operator<<() 458, 459 operator-=() 446 operator>>() 458 Operatoren Übersicht 974 Vorrangtabelle 976 optional Argument 725 ostream 70, 81 out 414 out_of_range 660, 813 Output-Iterator 917 overflow_error 660 Overhead 299 overloading 207, 443 override 586 P Paar Schlüssel-/Objekt- 825 pair 825 Palindrom 189 Parameter 197 aus Kommandozeile 395 -Liste 197 mehrdimensionaler Vektor 387 -Pack 785 Read-Only-Zeiger 389 1012 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis Typumwandlung 169 variable Anzahl 725, 785 von main() 395 von Makros 145 Zeiger 259 Paritätsbit 757 Passwort 227 past token 966 PATH 398 -Variable 153 payload 759 Performance -Test 739 Persistenz 409 polymorpher Objekte 689 von Objekten 421 Pfadangabe 967 Pfeiloperator 279 PI 143 picture element 787 Pixel 787 Pizza 423 Platzhalter 145 Pointer 255 Smart- 847 polar() 941 Polarkoordinaten 937, 941 polymorph Schnittstelle 611 Polymorphie 25, 585 Polynom 945 Produkt 949 Summe 949 pop_back() 817 pop_front() 817 Position Byte- 409 Cursor- 787 in Containern 807 in Strings 183 Positionierung -Flag 681 wahlfrei 681 Postfix -Notation 107 -Operator überladen 460 Potenz 214, 943 Potenzdarstellung von Ganzzahlen 962 Potenzreihe 942 pow() 62, 65, 214, 943, 951 Prädikat 913 Präfix -Notation 107 -Operator überladen 460 Präprozessor 31, 965 -Direktiven 33 Fehlermeldung 970 precision 86 Primärdatei 693 Primzahl 363 Prinzip FIFO- 803 LIFO- 201, 803 Priorität arithmetischer Operatoren 107 Warteschlange 805 priority_queue 805 private 271 Vererbung 541, 629 Problem Producer-Consumer 893 Reader-Writer 899 Producer-Consumer Problem 893 Programm Anwendungs- 269 beenden 417 -Code 203 -Generator 969 -Struktur 33 -Umgebung 399 programmglobal 223 Programmierung modulare 29, 273 objektorientierte 27, 269 prozedurale 27 Projekt 195, 212, 273 Software- 147 promotion integral 163 PROMPT 398 protected 553 -Vererbung 541, 629 Prototyp 33, 63 -Funktions- 197 Prozess aufrufender 417 PSEUDO 365 public 271 interface 271 Vererbung 629 Puffer 355 Punkt 73 Punktoperator 277 push() 811 push_back() 810 push_front() 810 put() 97 Q qsort() 729, 738 quadratisch Gleichung 260 Quadratwurzel 943 Quellcode 29 Quelldatei 29, 195, 273 Layout 33 Queue 803, 804 double ended 805 queue 70 Quick-Sort 729 R rand() 67 Random Access 679 Random-Access Iterator 807 Random-Access-Iterator 917 range_error 660 Range-For-Schleife 827 Rastergrafik 787 Raw Modus 414 rdstate() 685 read() 419 Reader-Writer Problem 899 Read-Only 247 -Methode 303 -Referenz 251 -Zeiger 389 real() 941 Realteil 937 Rechenregeln 105 rechtsbündig 89 record 281 recursive_mutex 891 Redefinition 1013 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis virtueller Methoden 587 von Datenelementen 547 von Elementen 543 von Methoden 547 Referenz 247 als Parameter 249 als Return-Wert 251, 313 auf abstrakte Klassen 611 auf Konstante 247 auf R-Wert 523 Read-Only- 247, 251 -Typ 249 Referenztyp bei Operatoren 253 Referenzzähler 857 Register 229 Reihenfolge von Destruktor-Aufrufen 589 von Konstruktor-Aufrufen 327, 549, 635 rein virtuell 607 Reinitialisierung 121 Rekonstruktion von Objekten 421 rekursiv Datenstruktur 495 Funktion 209 release() 853 remove() 927 replace() 185, 927 reset() 789, 853 resize() 815, 945 Return -Taste 73 return() 31, 199 Return-Typ -Ableitung 211 nachgestellter 211 Return-Wert 63, 199, 313 Objekt als 313 reverse() 385, 819 Reverse-Iterator 919 rfind() 185 right 88 Ring-Shift 951 Rot-Schwarz-Baum 821 Router 835 Routing Verfahren 835 RTTI 592 Rücksprungadresse 203 Run-Time-Type-Information 592 R-Wert 257 bewegen 523 Referenz auf 523 S Schachteln von Ausnahmebehandlungen 657 Schalter 45 Schaltjahr 316 Schleife 119 do-while- 125 Endlos- 123 Kopf 121 Range-For 827 schachteln 125 Zähler 121 Schlüssel /Objekt-Paar 825 bei Hash-Dateien 698 eingebetteter 821 Schlüsselwort 51 const 55 volatile 55 Schnittstelle Funktions- 197 öffentliche 271, 543, 555 polymorphe 611 public- 543, 555 von Klassen 301 Schreiben blockweises 419 in eine Datei 409 Schreibschutz für Parameter 389 Schreibweise exponentielle 47 Schrittweite 953 scientific 86 search() 923 second 825 seekg() 681 seekp() 681 Seiteneffekt 109, 147 Selbstaufruf von Funktionen 209 Selection-Sort-Algorithmus 397, 723 Semikolon 31 sequences 803 sequenziell Container 803 Dateizugriff 409 Server 897 Set 803 Einfügen 823 Löschen 823 ungeordnetes 831 vereinbaren 823 set 70, 820, 831 set() 789 setf() 82 setfill() 88 setjmp.h 70 setprecision() 86 setw() 88, 355 Setzen von Bits 755 shared_ptr 850, 857 Shell 417 Shift arithmetischer 753 Links- 753 logischer 753 -Operator 753 -Operator überladen 459 Rechts- 753 shift() 951 short 41 showpoint 86 showpos 84 Sieb Eratosthenes- 363 sign extend 165 signal.h 70 Signatur virtueller Methoden 587 von Funktionen 207 von Konstruktoren 291 sin() 62, 943 sinh() 943 size() 177, 815, 945, 957 sizeof 43 sizeof() 283 Skalar 941, 947 1014 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis sleep() 340, 885 slot 681, 698 Smart Pointer 847 vergleichen 855 Software -Komponenten 195 -Projekt 147 Sondertasten 154 Sonderzeichen 49 sort() 819, 931 sort_heap() 933 Sortieren Algorithmen-Bibliothek 931 von Listen 819 Sortierverfahren Bubble-Sort 363 Quick-Sort 729, 739 Selection-Sort- 397, 723 Speicher dynamisch reservieren 485 freigeben 487 Speicherklasse extern 225 register 229 static 227 von Funktionen 231 von Variablen 223 Speicherleck 848 Speichermodell 805 Speicherplatz 53 für Datenlemente 273 Speicherreservierung dynamische 485 Speicherzugriff konkurrierend 881 Spezifikation Exception 657 Spezifizierer 225, 586 splice() 497 Sprung 135 Sprungtabelle 729 sqrt() 62, 75, 943, 951 srand() 67 sstream 70 Stack 201, 209, 803, 881 -Unwinding 655 stack 70, 804 Standard Allokator-Klasse 805 -Ausgabe 81 -Ein-/Ausgabe 153 -Eingabe 81 -Fehlerklassen siehe Fehlerklasse -Funktion, Prototyp 63 -Header-Datei 63, 71 -Klassen 73 -Konvertierung 475 -Kopierkonstruktor 517 -Makros 151, 971 -Methoden 519 -Namensbereich 233 -Streams 81 -Zuweisung 519, 613 StandardStreams 81 Standardbibliothek 29, 195 Standardfunktion bsearch() 973 mathematische 62 qsort() 729, 738, 973 terminate() 653 Standardklasse Siehe auch Klasse Container 801 File-Stream 411 string 177 stringstream 316 Standardmethoden 305 Standardwert 293 Stapel 201 start() 957 static 227, 231, 335 static_cast<_> 577 statisch 223 Bindung 591 Datenelement 333 Elementfunktion 335 Status Datei- 685 -Flag 415 Flag von Dateien 685 -Wort 685 std 31, 71, 233 stdarg.h 70, 725 stddef.h 70 stdexcept 70 stdio.h 70 stdlib.h 70 Steuerung peripherer Geräte 145 Steuerzeichen 49, 761 ausblenden 155 Bildschirm 979 Strategie Überlauf- 698 strcat() 391 strcmp() 355 strcpy() 355, 386, 391 Stream 31, 79 -Klassen 81 Standard- 81 streambuf 70 Stream-Iterator 917 stride() 957 String 45, 73 anhängen 179 Ausgabe 91 einfügen 183 Elementzugriff 187 -Ende-Zeichen 355 ersetzen 185 Konstante 47 -Länge 177 leerer 47, 177 löschen 183 manipulieren 183 suchen 185 Teil- 185 vergleichen 181 Verkettung 179 zuweisen 177 string 70 Header-Datei 177 Standardklasse 177 string.h 70 Stringende-Zeichen 47 stringizing token 965 stringstream 316 strlen() 355, 385 Stroustrup Bjarne 25 strstr() 391 struct 281 Struktogramm 126, 128 Struktur rekursiv 209 tm 285 von C++-Programmen 33 Subtraktion von Zeigern 381, 383 1015 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis Suche binäre 697, 812, 933 in Bereichen 921 in Maps 825 in Strings 185 sum() 951 swap() 259, 311 swapping 485 switch -Anweisung 133 Symbol 149 symbolisch Konstante 143 Symmetrie von Argumenten 311 sync() 92 Syntaxfehler 29 Systemzeit 285 T Tabelle ASCII-Code 977 Hash- 803, 829 virtuelle Methoden- 591 Vorrang- 976 Tabulatorbreite 49 Tabulatorzeichen 49 tan() 62, 943 tanh() 943 Tasten Sonder- 154 Teil -String 185 Teilmatrix 955 Teilobjekt 275, 327 initialisieren 329 konstantes 331 Teilvektor 953 tellg() 681 tellp() 681 TEMP 398 Template 770 Container- 805 terminate() 653 Test Performance- 739 Text Ersatz- 143 Textdatei 414 Textmodus 414 Textzeile einlesen 97 this 309 this_thread 885 Thread 881 -ID 889 initialisieren 883 throw 651 Tilde 297 time() 136, 189, 285 time.h 70 time_t 285 tm 284 Token 33 Past- 966 stringizing 965 tolower() 151 top() 813 Top-Down-Prinzip 195 transform() 925 Transponierte 959 Treiber Bildschirm 979 Treppe zeichnen 789 true 39, 111 trunc 414 try 653 Typ Siehe Datentyp 43 arithmetischer 42 einer Funktion 63 eines Ausdrucks 105 enum 337 -Feld 585 Funktion 197 ganzzahliger 43 -Information zur Laufzeit 592 maschinenabhängiger 733 Parameter 197 void 67, 199 von Zeigern 255 Typanpassung implizite 163 übliche arithmetische 751 type_traits 70 typedef 733 typeinfo 70 typenlos 379 Typname Definition 733 Typumwandlung arithmetische 163 ausschließen 477 bei Funktionsaufrufen 571 bei Zuweisungen 167, 573 explizite 169 für Klassen 473 implizite in Basisklassen 571 in Klassenhierarchien 571 Standard- 475 Verfahren 165 von Referenzen 575 von Zeigern 575 U Überladung von Funktionen 207 Überlauf -Strategie 698 Übersetzungeinheit 223 Umgebung eines Programms 399 Umgebungsvariable 967 Umlenken von Ein-/Ausgabe 153 Umwandlung von Datentypen 163 underflow_error 660 UND-Operator 113, 751 union 283 unique( 857 unique_ptr 850 UNIX 153 unlock() 887 unsetf() 82 Unterprogrammsprung 203 Unwinding Stack- 655 Up-Cast 577 uppercase 84 use_count() 857 User Network Interface 759 using 71 Deklaration 235 -Direktive 31, 235 utility 70 1016 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis V va_end() 727 va_list 725 va_start() 725 valarray 70, 945 value high- 172 Variable 53 extern 225 global 53 Klassen- 333 lokal 53 lokale 201 PATH- 153 register- 229 Zeiger- 255 vector 70, 804, 805 Vektor 351 Adresse 379 als Argument 385 als Datenelement 361 assoziativer 457 char- 355 Container 805 -Element 351 globaler 353 Länge 351 lokaler 353 mehrdimensionaler 359 -Name 351 numerischer 945 statischer 353 von Zeigern 393, 723 Zuweisung 353 Vereinbarung von Variablen 53 Vererbung 25 Art 541 -Diagramm 631, 635 Konzept 539 Mehrfach- 629 Verfahren Routing- 835 Sortier- 363, 723 Vergleich 39, 111 -Funktion 738 lexikografischer 181 von Schlüsseln 821 von Strings 181 von Zeigern 383 Vergleichsoperator 111, 181 Verkettung von Strings 179 Verschachteln von Schleifen 125 von Verzweigungen 127 Verschachtelungstiefe von Schleifen 125 Verschiebung von Bits 753 Verschlüsselung von Daten 761 Version einer Klasse 269 Index- 387 von Funktionen 205 von Klassen 301 von Methoden 551, 587 Zeiger- 387 Verweis Operator 257 virtual 587 Basisklasse 633 Virtual Method Table 591 virtuell Methode 585 Visual Studio 980 Community 980 Express 980 VMT 591 void 43, 67, 199 void * 379 volatile 55 Vorrang 105, 442 arithmetischer Operatoren 107 Auswahloperator 131 boolescher Operatoren 113 von Bitoperatoren 751 Vorrangtabelle 107 für Operatoren 976 Vorzeichen 41, 962, 964 -Bit 165, 962 -Erweiterung 165 -Operator 107 W Währung europäische 447 wahlfrei Dateizugriff 409, 679 Wahrheitswert 39 wait() 895 Warnung 29 Warteschlange mit Prioritäten 805 Warteschlangen 803 wchar.h 70 wchar_t 39 wctype.h 70 weak_ptr 850, 862 Wegefindung 835 Wert Absolut- 131, 963 boolescher 39 eines Ausdrucks 105 L- 257 R- 257 Wertebereich 964 what() 661 while Schleife 119 width() 88, 355 Wiederholung 135 Wiederverwendbarkeit 27, 539 von Klassen 273 Wiederverwendung 195 WinNT 153 Wort 93 Status- 685 write() 419 Wurzel komplexe 937 Z Zähler Schleifen- 121 Zahl Darstellung 962 Fibonacci- 353 komplexe 937 negative 85, 964 PI 143 positive 962 Prim- 363 Zahlensystem 85 Zeichen Begrenzungs- 97 Behandlung von 151 Steuer- 761, 979 Stringende 47 Zugriff 187 Zwischenraum- 93 1017 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028 Stichwortverzeichnis Zeichencode Ausgabe 91 Zeichenkette 45, 177 Zeichenkonstante 47 Zeichensatz 39 Zeiger 255 als Parameter 259 als Return-Wert 313, 391 -Arithmetik 381, 383 auf abstrakte Klassen 611 auf const-Objekt 389 auf Funktionen 729 auf Objekte 279 auf Zeiger 723 get-/put- 679 konstanter 255, 309 NULL- 487 Null- 256 Read-Only- 389 this 309 typenloser 379 und Vektoren 379 -Vektor 393, 723 vergleichen 383 -Version von Funktionen 387 Zeigervariable Definition 255 Zeilennummer 153, 969 Zeit 285 zero extend 165 Zerstören von Objekten 297 Ziffer hexadezimale 85 Zufallszahl 67 Zufallszahlengenerator 67, 136 Zugriff auf Basisklasse 547 auf Container 813 auf Daten 269 auf private-Elemente 277 Element- 545 fehlerhafter 301 -Methoden 301 wahlfreier Datei- 679 Zugriffsrechte bei Vererbung 541 Zusammenfassung 107 Zuweisung 442 einfache 109 implizite Typumwandlung 167 Move- 525 Standard- 519 Typumwandlung 573 überladen 519 virtuelle 613 von Objekten 277, 305 von Strings 177 zusammengesetzte 109, 757 Zuweisungsoperator 109 Zweier-Komplement 165, 963 Zweier-Potenz 753 Zweig else- 127 Zwischenraumzeichen 93 1018 © des Titels »C++ – Lernen und professionell anwenden« (ISBN 9783958450288) 2015 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/028