Inhaltsvcrzeichnis 7 Inhaltsverzeichnis Vorwort.. 15 1 C++-Grundlagcn................................................ 19 Einc kurze Geschichte von C+ + 20 C: Del' Beginn dcr modcrncn Programrnierung 20 Warum wurdc C+ + notig?...................................... 21 C+ + wird geboren 22 Die Entwicklungvon C+ + 23 Wie C++ rnitjava und C# zusammcnhangt 24 Objcktoricnticrtc Programmicrung 26 Einkapsclung.................................................. 27 Polymorphic.................................................. 21) Vercrbung.................................................... 29 Ein erstcs cinfachcs Prograrnm.,..................................... 30 Das Programm eingcbcn..................... 31 Das Programm kompilieren 31 Das Programm ausfuhren 32 Einc zeilenweise Analyse des crstcn Beispielprogramms............... 33 Syntaxfehler bcarbciten 36 Ein zweites cinfaches Programm...................................... 37 Eincn Operator bcnutzen 39 Eingaben von der Tastatur lescn................................... 41 Einige Output-Optionen............................................ 42 Ein weitcrcr Datcnryp 44 Projekt 1-1: Fuf3 in Meter urnwandeln................................. 46 Zwci Stcueranweisungen............................................ 48 Die if-anweisung.............................................. 48 Die for-schleife 50 Mit Codeblockcn arbeiten........................................... 51 Semikolons und Platzierung...................... 53 Code cinruckcn 54 Projekt 1-2: Eine Tabelle mit Fnf3-in-Meter-Umwandlungen erstellen 55 Eine Einfuhrung in Funktionen...................... 57 Die C++-Bibliotheken............................................. 59 Die C++ -Sc h liissclworter 60 Bczcichner 61 Obungsaufgaben................................................... 62
8 C# IT-Tutorial 2 Einfiihrung in Datentypen und Operatoren....................... 65 Warum Datentypcn wichtig sind............................ 66 Die C++-Datentypen kennen lernen............................ 66 Ganzzahlcn 69 Zeichen 71 FlieBkommatypen............................ 73 Der bool-typ 74 void........................................... 75 Projekt 2-1: Mit dem Mars reden 76 Literale.......................................................... 78 Hexadezimale und oktale Literale 79 String-Literale................................................ 80 Escape-Sequenzen fitr Zeichen 81 Ein naherer Blick aufvariablen............ 82 Eine Variable initialisieren 83 Dynamische Initialisierung...................................... 83 Operatoren....................................................... 84 Arithmetische Opcratorcn 84 Inkrement und Dekrement 85 Relationalc und logische Operatoren.................................. 88 Projekt 2-2: Eine logische XOR-Operation konstruieren 90 Der Zuweisungsoperator 93 Zusammengesetzte Zuweisungen 94 Typumwandlung in Zuweisungen 95 Ausdrucke 95 Typumwandlung in Ausdriicken..................................... 96 In boolcsche und aus booleschen Werten umwandeln................ 96 Casts........................................................ 96 Abstande und Klammern 98 Projekt 2-3: Die Tilgungsraten eines Kredits berechnen............ 98 Obungsaufgaben................................................ 101 3 Programmsteueranweisungen.................................... 103 Die if-anweisung 104 Der Bedingungsausdruck....................................... 106 Verschachtelte if-anweisungen 107 Die if-else-if-leiter............................................ 108 Die switch-anweisung........................................... 110 Verschachtelte switch-anweisungcn.............................. 114 Projekt 3-1: Mit dem Autbau eines C+ +-Hilfesystems beginnen.......... 115 Die for-schlcife................................................... 117 Einige Varianten der for-schleife................................. 120 Fchlcnde Komponenten........................................ 121 Die for-endlosschleife 122 Schleifen ohne Korper 122 Schleifensteucrvariablen innerhalb der for-schleife deklarieren........ 123
lnhaltsverzeichnis 9 Die while-schleife 125 Die do-while-schleife 127 Projekt 3-2: Das C+ +-Hilfesystern verbessern.......................... 129 Eine Schleife mit breakvcrlassen 133 Eine Schleife mit continue fortsetzcn.................................. 135 Projekt 3-3: Das C++-Hilfesystern fertig stellen " 136 Verschachteltc Schleifen 140 Mit del' goto-anweisung arbeitcn " " 141 Ubungsautgabcn " 142 4 Arrays, Strings und Zeiger 145 Eindimensionale Arrays " 146 Keine Prufung del' Grenzen 149 Zweidimensionale Arrays 151 Mehrdimensionale Arrays " 152 Projekt 4-1: Ein Array sortieren....................................... 153 Strings........................................................... 156 String-Grundlagen............................................. 156 Einen String tiber die Tastatur einlescn 157 Einige String-Bibliotheksfunktionen 159 strcpy " 159 strcat 160 strcmp 160 strlen............................... 160 Ein Beispiel fur Stringfunktionen................................. 160 Mit dem Nullterrninator arbcitcn " 161 Arrays initialisieren................................................. 163 Arrays unbestimmter Gr<:jBe initialisieren 166 String-Arrays...................................................... 168 Zeiger 170 Was sind Zeiger?................................................... 170 Die Zeiger-Operatoren 171 Del' Basistyp cines Zeigers ist wichtig.............................. 173 Werte mit Hilfe cines Zeigers zuweiscn............................ 175 Zeigcr-Ausdrucke.................................................. 176 Mit Zeigern rechnen 176 Zeiger vergleichen 178 Zeiger und Arrays.................................................. 178 Einen Zeiger indizicrcn " " 181 Stringkonstanten " 183 Projekt 4-2: Einen String VOl' Ort umkehrcn............................ 184 Arrays von Zeigern " 187 Die Null-Zeigcr-Konvention 189 Mehrfache Indirektion.............................................. 189 Ubungsaufgaben,.................................................. 192
10 C# IT-Tutorial 5 Eine Einfiihrung in Funktionen 193 Grundsatzliches tiber Funktionen ".................................. 194 Die allgemeine Form einer Funktion 194 Eine Funktion crstcllen......................................... 195 Argumente verwenden 196 Die return-anweisung 198 Werte zurlickgeben " 201 Funktionen in Ausdrucken verwenden............................ 203 Regeln fiir den Gultigkeitsbereich.................................... 205 Lokaler Gultigkeitsbereich 205 Globaler Gultigkeitsbereich " 211 Zeiger und Arrays an Funktionen ubergebcn " " 214 Einen Zeiger ubergeben........................................ 214 Ein Array ubergeben " 216 Strings ubergeben " 219 Zeiger zurlickgeben " 220 Die Funktion maini)............................................... 221 argc und argv: Argumente von mainr) " 222 Numerische Befehlszcilenargumente iibergeben '" " 224 Funktionsprototypen 226 Header enthalten Prototypen " 228 Rekursion........................................................ 229 Projekt 5-1: Der Quicksort.......................................... 232 Ubungsaufgaben, " 237 6 Ein naherer Blick auffunktionen................................. 239 Zwei Methoden zur Ubergabe von Argumenten " 240 Wie C+ + Argumente ubergibt 240 Mit einem Zeiger ein Argument als Referenz ubergeben 241 Referenzparameter 244 Referenzen zuruckgeben 248 U nabhangige Rcferenzen " 251 Einige Einschrankungen fur das Arbeiten mit Rcferenzcn 252 Funktionen uberladen " 253 Automatische Typumwandlungen und das Ubcrladen 258 Projekt 6-1: Oberladene Ausgabefunktioncn erstellen " 260 Standardargumentevon Funktionen " 265 Standardargumente im Vergleich zum Oberladen von Funktionen 268 Standardargumente korrekt vcrwenden " 269 Funktionen iiberladen und Mehrdeutigkeit 270 Ubungsaufgabcn " 274 7 Weitere Datentypenund Operatoren " 277 Die Modifizierer canst und volatile " 278 const " 278 volatile 281
Inhaltsverzeichnis 11 Modifiziercr filr Spcicherklasscn...................................... 281 auto......................................................... 282 extern........................................................ 282 Statische Variablen............................................. 284 Registervariablcn 288 Aufzahlungcn 291 typedef, 294 Bitweise Operatorcn................................................ 295 AND, OR, XOR und NOT 296 Dic Shift-Operatoren........................................... 302 Projekt 7-1: Bitweise Rotationsfunktionen crstellen...................... 304 Der?-Operator.................................................... 309 Der Komma-Operator.............................................. 310 Mehrfachzuweisungen.............................................. 312 Die zusammcngesetztc Zuweisung.................................... 312 Mit sizeofarbciten 313 Zusammcnfassung dcr Rangfolge..................................... 315 Ubungsaufgaben................................................... 315 8 Klassen und Objekte.............................................. 317 Die Grundlagen von Klassen......................................... 318 Die allgemeine Form einer Klasse, 318 Eine Klasse definieren 319 Funktionen zu ciner Klasse hinzufugen...................... 324 Projekt 8-1: Eine Help-Klasse erstellcn 327 Konstruktoren und Destruktoren..................................... 333 Parametrisierte Konstruktoren 336 Einen Konstruktor zu der Vchicle-Klasse hinzufugen................. 338 Eine alternative Initialisierung.................................... 339 Inline-Funktionen 341 Inline-Funktionen in einer Klasse erstellen...................... 343 Projekt 8-2: Eine Qucue-Klassc crstellen, 346 Arrays von Objekten 351 Objekt-Arrays initialisicrcn...................... 352 Zeiger auf Objekte, 354 Objektreferenzen...................... 356 Ubungsautgaben................................................... 356 9 Ein naherer BlickaufKlassen 359 Konstruktoren uberladen............................................ 360 Objckte zuweiscn.................................................. 361 Objekte an Funktionen ubergeben.................................... 363 Konstruktoren, Dcstruktoren und die Ubergabe von Objekten......... 364 Objektc per Rcferenz ubergeben, 366 Ein potenzielles Problem bei der Ubergabe von Objekten............. 368
12 C# IT-Tutorial Objckte zuriickgeben 369 Einen Kopierkonstruktor erstellen und nutzen.......................... 371 Befreundete Funktionen............................................ 375 Strukturen und Unions 379 Strukturen 380 Unions... 382 Anonyme Unions,... 384 Das Schlusselwort this 386 Operatoren uberladen.............................................. 387 Operatoren mit Elementfunktionen iibcrladen 388 Die Reihenfolge ist wichtig 392 Unare Operatoren mit Elementfunktioncn uberladen................ 392 Nicht-Element-Operatorfunktionen.................................. 397 Miteinem Freund einen unaren Operator uberladcn 402 Operatoren uberladen - Tipps und Einschrankungen................ 404 Projekt 9-1: Eine Set-Klasse erstellen 405 Obungsaufgaben.................................................. 414 10 Vererbung, virtuelle Funktionen und Polymorphie 417 Grundlagen der Vererbung.......................................... 418 Vererbung und Zugriffaufdie Elemente 421 Den Zugriff aufdie Basisklassesteuern................................ 424 Mit geschlitzten Elementcn arbeiten.................................. 427 Konstruktoren und Vererbung....................................... 430 Konstruktoren der Basisklasse aufrufen.. _......................... 432 Projekt 10-1: Die Vehicle-Klasse erweitern 437 Eine mehrstufige Hierarchie erstellen................................. 440 Mehrere Basisklassen erben......................................... 443 Wann werden Konstruktor- und Destruktor-Funkrionen ausgefiihrt?....... 444 Zeiger auf abgeleitete Typen 446 Referenzen aufabgeleitete Typen 447 Virtuelle Funktionen und Polymorphie......................... 447 Die Grundlagen der virtue lien Funktion........................... 448 Virtuelle Funktionen werden vererbt 450 Warum virtuelie Funktionen? 452 Virtue lie Funktionen anwenden...................................... 453 Rein virtuelle Funktionen und abstrakte Klassen........................ 457 Obungsaufgaben _ " 461 11 Das I/O-System von C++ 463 Die alte und neue I/O von C+ + im Vergleich.......................... 464 C+ +-Streams.................................................... 465 Die vordefinierten Streams von C+ +............................. 466 Die Stream-Klassen von C+ +....................................... 466 Die I/O-Operatoren uberladen 468
lnhaltsvcrzcichnis 13 Inserter erstellen............................................... 468 Inserter mit befrcundcteu Punktioncn uberladen 470 Extraktorcn ubcrladen 472 Porrnaticrtc I/O 474 Mit ios-elcmcnuunktioncn forrnatiercn 474 Mit l/o-manipulatoren arbeitcn.................................. 480 Eigene Manipulator-Funktionen erstcllcn, 483 Datci-I/O 485 Eine Datei offnen und schliegen.................................. 485 Textdateicn lcsen und schreibcn.................................. 488 Unformatierte und binare I/O.................................... 490 Datcnblocke lescn und schreiben 493 Weiterc l/o-funktionen 494 Andere Versionen von geto...................................... 494 gctlinef)...................................................... 4Sl6 Das Dateicndc (EOF) crkcnncn 496 peeko und putbackf) 497 flushr) 497 Projckt 11-1: Ein Utility 711111 Verglcich von Dateien 497 Wahlfi'eier Zugriff........................................... 501 Den I/O-Status prufcn, 504 Ubungsaufgabcn, 505 12 Ausnahmen, Templates und andere fortgeschrittene Themen....... 507 Ausnahmebchandlung.............................................. 508 Grundlagen der Ausnahmebchandlung 508 Mit mchrcren catch-anweisungen arbeitcn......................... 514 Aile Ausnahmen abfangen................... 516 Ausnahmen angeben, die von eincr Funktion ausgclost werden 517 Eine Ausnahrnc erneut ausloscn..................... 519 Templates........................................................ 521 Generische Funktioncn _................... 522 Eine Funktion mit zwci gencrischen Typen......................... 524 Einc generische Funktion cxplizit uberladen 525 Gcnerischc Klassen............................................. 527 Klassen cxplizit spczialisicren 530 Projekt 12-1: Eine generischc Qucuc-Klasse erstcllen 532 Dynamische Allozierung............................................ 535 Allozierten Speicher initialisicrcn...................... 538 Arrays allozieren............................................... 539 Objekte allozieren 540 Namensraume 544 Grundlagcnwisscn tiber Narncnsraume, 545 using 548 Anonyme Narncnsraumc........................................ 550 Dcr Namespace std 551
14 C# IT-Tutorial Statische Klassenelcmente 552 Statische Elementvariablen...................................... 552 Statische Elementfunktionen............................. 554 Runtime Type Identification (RTTI) 556 Die Typumwandlungsoperatoren 560 dynamic_cast................................................. 560 const cast.................................................... 562 static cast.................................................... 562 reinterpret_cast 562 Wie geht es weiter? _.......................... 563 Ubungsaufgaben "................................................ 563 A Antworten aufdie Ubungsaufgaben 565 Kapite1 I: C++-Grundlagen _................. 566 Kapite1 2: Einfuhrung in Datentypen und Opcratoren.................... 568 Kapitel 3: Programmsteueranweisungen............................... 570 Kapitel 4: Arrays, Strings und Zeiger.................................. 572 Kapitel 5: Eine Einflihrung in Funktionen 575 Kapite16: Ein naherer Blick auf Funktionen............................ 578 Kapitel 7: Weitere Datentypen und Operatoren................ 583 Kapitel 8: Klassen und Objekte 586 Kapitel 9: Klassen gcnauer betrachtet.................................. 589 Kapitel10: Vercrbung, virtuelle Funktionen und Polymorphie 591 Kapitel 11: Das I/O-System von C+ + 592 Kapitel12: Ausnahmen, Templates und andere fortgeschrittene Themen.... 595 B Der Praprozessor................................................ 603 #define 604 Funktionsmakros.............................................. 606 #error 608 #inc1ude 608 Direktiven fur die bedingte Kompilierung 609 #if, #else, #elifund #endif.............................. 609 #ifdefund #ifndef,........................... 612 #undef...................................................... 613 Mit defined arbeiten 613 #line............................................................ 614 #pragma _........................................... 614 Die Praprozessor-Operatoren # und # #........................... 614 Vordefinierte Makronamen 616 emit einem alteren C++-Compiler arbeiten 617 Zwei einfache Anderungen 619 Stichwortverzeichnis 621